大师兄的数据分析学习笔记(六):探索性数据分析(五)

2022-04-29  本文已影响0人  superkmi

大师兄的数据分析学习笔记(五):探索性数据分析(四)
大师兄的数据分析学习笔记(七):探索性数据分析(六)

四、多因子与复合分析

4. 相关系数
  • 相关系数越大,越接近1,变化趋势越正向同步;
  • 相关系数越小,越接近-1,变化趋势越反向同步;
  • 相关系数越接近0,变化趋势越不相关;
4.1 皮尔逊相关系数
>>>import numpy as np
>>>import scipy.stats as ss

>>>data1 = np.random.rand(10)
>>>data2 = np.random.rand(10)
>>>pccs = ss.pearsonr(data1,data2)
>>>print(f"data1:{data1}")
>>>print(f"data2:{data2}")
>>>print(f"Pearson's correlation coefficient:{pccs[0]}")
>>>print(f"Two-tailed p-value:{pccs[1]}")
data1:[0.99837294 0.784658   0.53345186 0.59309483 0.28240823 0.66189433
 0.29580696 0.31315612 0.7754216  0.77443794]
data2:[0.48826977 0.81899969 0.77566201 0.91464751 0.05536523 0.35246479
 0.32585614 0.71434004 0.37966254 0.94915496]
Pearson's correlation coefficient:0.32409101999585543
Two-tailed p-value:0.3609398908469933
4.2 斯皮尔曼相关系数
  • n:每组数据的数量;
  • d:两组数据排名后的名次差;
>>>import numpy as np
>>>import scipy.stats as ss

>>>data1 = np.random.rand(10)
>>>data2 = np.random.rand(10)
>>>pccs = ss.spearmanr(data1,data2)
>>>print(f"data1:{data1}")
>>>print(f"data2:{data2}")
>>>print(f"Spearman's correlation coefficient:{pccs[0]}")
>>>print(f"Two-tailed p-value:{pccs[1]}")
data1:[0.0085787  0.94480457 0.29985499 0.54689296 0.13564683 0.72558257
 0.83684571 0.2797848  0.58108358 0.96698258]
data2:[0.71151971 0.3121948  0.20845518 0.68793807 0.62991839 0.43235496
 0.93005684 0.64161376 0.93214243 0.06559743]
Spearman's correlation coefficient:-0.32121212121212117
Two-tailed p-value:0.3654683104386702
5. 线性回归

\hat{b}=\frac{\sum_{i=1}^n(x_i-\overline{x})(y_i-\overline{y})}{\sum_{i=1}^n(x_i-\overline{x})^2} = \frac{\sum_{i=1}^nx_iy_i-n\overline{xy}}{\sum_{i=1}^nx_i^2-n\overline{x}^2}
\hat{a}=\overline{y}-\hat{b}\overline{x}
\hat{y} = \hat{b}x+\hat{a}

y_i:实际值
\overline{y}:均值
\hat{y_i}:预测值
决定系数越接近1,代表线性回归效果越好。

k:参数的个数

值得范围在0-4之间;
如果值为2则残差不相关(好的回归);
接近4代表残差正相关;
接近0代表残差负相关。

>>>import random
>>>import numpy as np
>>>import matplotlib.pyplot as plt
>>>from sklearn.linear_model import LinearRegression

>>>x = np.arange(10).astype(float).reshape((10,1))
>>>y = random.randint(-5,20)+np.random.rand(10,1)

>>>reg = LinearRegression()
>>>res = reg.fit(x,y) # 拟合
>>>y_pred = reg.predict(x) # 预测值
>>>print(f"coefficient:{reg.coef_}")
>>>print(f"intercept:{reg.intercept_}")

>>>plt.scatter(x,y)
>>>plt.plot(y_pred)
>>>plt.show()
coefficient:[[-0.01168797]]
intercept:[19.51730895]
6. 主成分分析
  1. 求特征协方差矩阵;
  2. 求协方差的特征值和特征向量;
  3. 将特征值按照从大到小的顺序排序,选择其中最大的k个;
  4. 将样本点投影到选取的特征向量上。
>>>import numpy as np
>>>import matplotlib.pyplot as plt
>>>from sklearn.decomposition import PCA

>>>data = np.array([np.random.randint(0,5,10),np.random.randint(0,5,10),np.random.randint(0,5,10),np.random.randint(0,5,10)]).T
>>>lower_dim = PCA(n_components=1)
>>>lower_dim.fit(data)
>>>print(f"explained_variance_ratio:{lower_dim.explained_variance_ratio_}")

>>>plt.plot(lower_dim.fit_transform(data))
>>>plt.show()
explained_variance_ratio:[0.40663428]
上一篇 下一篇

猜你喜欢

热点阅读