Ava*_*hra 3 python numpy r pandas scikit-learn
我有dataFrame名为"data".我计算了数据的相关性:
corr = data.corr()
Run Code Online (Sandbox Code Playgroud)
我想从"data"文件中删除相关性大于0.75的列.使用以下命令可以非常轻松地在R中完成此操作:
hc=findCorrelation(corr,cutoff = 0.75)
data <- data[,-c(hc)]
Run Code Online (Sandbox Code Playgroud)
我在python中寻找类似的命令.在熊猫或scikit-learn中是否有任何可以执行类似工作的命令?
步骤1.准备一些数据
from scipy.stats import multivariate_normal
covs = np.eye(10)
for i in range(10):
for j in range(10):
if i!=j:
covs[i,j] = (i*j)/100
mvn = multivariate_normal(cov=covs)
data = mvn.rvs(size = 100)
data.shape
(100, 10)
Run Code Online (Sandbox Code Playgroud)
步骤2. Vizualize相关性.
在这里,你有一个二维相关的ndarray.数据按行组织,案例按行排列.为了在列数据上运行相关性,您需要首先转置数组(提示:numpy以行方式运行相关性):
r = np.corrcoef(data.T)
plt.imshow(r, cmap = "coolwarm")
plt.colorbar();
Run Code Online (Sandbox Code Playgroud)
正如您可能看到的,某些列(功能,如他们在统计或ML中所说)高度相关.
步骤3.删除相关列
让我们找出哪些相关超过.5阈值,排除对角元素,这显然是完全自相关的:
idx = np.abs(np.tril(r, k= -1)) < .5
idx_drop = np.all(idx, axis=1)
data_uncorr = data[:, idx_drop]
data_uncorr.shape
(100, 8)
Run Code Online (Sandbox Code Playgroud)
这意味着我们摆脱了2个共线列.
第4步.完整性检查
让我们通过视觉和数学方法进行一些检查:
plt.imshow(np.corrcoef(data_uncorr.T), cmap = "coolwarm")
plt.colorbar();
Run Code Online (Sandbox Code Playgroud)
np.sum(np.abs(np.tril(np.corrcoef(data_uncorr.T), k=-1)) >.5)
0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |