皮尔逊相关系数JAVA实现
来源:互联网 发布:studio2303a扫描软件 编辑:程序博客网 时间:2024/06/05 12:48
经常需要计算皮尔森相关系数,在网上借鉴了算法和程序,不够理想,改进后,共享在这里,方便需要计算相关系数的使用。
import java.util.List;/** * 计算两个样本数据之间的皮尔逊相关系数 */public class PearsonCorrelation {public static void main(String[] args) {test();}private static void test(){/*用于测试*/double[] x = new double[] { 0.98, 0.96, 0.96, 0.94, 0.925, 0.9025, 0.875 };double[] y = new double[] { 1, 1, 1, 1, 0.961483893, 0.490591662, 0.837341784 };double score = getPearsonCorrelationScore(x, y);System.out.println(score);//0.6350393282549671}public static double getPearsonCorrelationScore(List x, List y) {if (x.size() != y.size())throw new RuntimeException("数据不正确!");double[] xData = new double[x.size()];double[] yData = new double[x.size()];for (int i = 0; i < x.size(); i++) {xData[i] = x.get(i);yData[i] = y.get(i);}return getPearsonCorrelationScore(xData,yData);}public static double getPearsonCorrelationScore(double[] xData, double[] yData) {if (xData.length != yData.length)throw new RuntimeException("数据不正确!");double xMeans;double yMeans;double numerator = 0;// 求解皮尔逊的分子double denominator = 0;// 求解皮尔逊系数的分母double result = 0;// 拿到两个数据的平均值xMeans = getMeans(xData);yMeans = getMeans(yData);// 计算皮尔逊系数的分子numerator = generateNumerator(xData, xMeans, yData, yMeans);// 计算皮尔逊系数的分母denominator = generateDenomiator(xData, xMeans, yData, yMeans);// 计算皮尔逊系数result = numerator / denominator;return result;}/** * 计算分子 * * @param xData * @param xMeans * @param yData * @param yMeans * @return */private static double generateNumerator(double[] xData, double xMeans, double[] yData, double yMeans) {double numerator = 0.0;for (int i = 0; i < xData.length; i++) {numerator += (xData[i] - xMeans) * (yData[i] - yMeans);}return numerator;}/** * 生成分母 * * @param yMeans * @param yData * @param xMeans * @param xData * @return 分母 */private static double generateDenomiator(double[] xData, double xMeans, double[] yData, double yMeans) {double xSum = 0.0;for (int i = 0; i < xData.length; i++) {xSum += (xData[i] - xMeans) * (xData[i] - xMeans);}double ySum = 0.0;for (int i = 0; i < yData.length; i++) {ySum += (yData[i] - yMeans) * (yData[i] - yMeans);}return Math.sqrt(xSum) * Math.sqrt(ySum);}/** * 根据给定的数据集进行平均值计算 * * @param datas数据集 * @return 给定数据集的平均值 */private static double getMeans(double[] datas) {double sum = 0.0;for (int i = 0; i < datas.length; i++) {sum += datas[i];}return sum / datas.length;}}
阅读全文
0 0
- 皮尔逊相关系数JAVA实现
- 皮尔逊相关系数的java实现
- 社会化推荐系统浅析-皮尔逊相关系数的java实现
- 【JAVA实现】基于皮尔逊相关系数的相似度计算
- 【JAVA实现】基于皮尔逊相关系数的相似度计算
- 【JAVA实现】基于皮尔逊相关系数的相似度
- 大数据JAVA实现 基于皮尔逊相关系数的相似度
- JAVA实现基于皮尔逊相关系数的相似度计算
- java实现两个向量的相关系数算法
- Pearson(皮尔逊)相关系数及MATLAB实现
- 皮尔逊相关系数
- 皮尔逊相关系数
- 皮尔逊相关系数
- 皮尔逊相关系数
- 皮尔逊相关系数
- 统计相关系数(1)——Pearson(皮尔逊)相关系数及MATLAB实现
- 统计相关系数(1)——Pearson(皮尔逊)相关系数及MATLAB实现
- 统计相关系数(1)——Pearson(皮尔逊)相关系数及MATLAB实现
- 在线编程无法在sublime中使用input()和raw_input()的解决方法
- 创建二维矩阵并矩阵求和再转换
- AIM Tech Round 4 (Div. 2) C. Sorting by Subsequences
- Outlook邮箱遭攻击
- C#图片转二进制、二进制转图片
- 皮尔逊相关系数JAVA实现
- 用两个栈实现队列、旋转数组的最小数、斐波那契数列、青蛙跳台阶、矩形覆盖 --漫漫算法路 刷题篇
- Python Study (03)对象的属性
- Yii2下拉框实现
- yii 多条件搜素
- 矩阵价值和
- python 字符串反转
- AIM Tech Round 4 (Div. 2) D. Interactive LowerBound
- 环信(Android)设置头像和昵称的方法