用于逻辑回归的热图

时间:2015-10-09 12:30:01

标签: python scikit-learn prediction logistic-regression

所以,

我是python的新手,我的代码有点问题

X_train, Y_train, Xtest, ytest = pickle.load(open("data.p", "rb"))

h = 100
x_min, x_max = X_train.min() - 1, X_train.max() + 1
y_min, y_max = X_train.min() - 1, X_train.max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

logreg = linear_model.LogisticRegression(C=1.0, penalty='l2', tol=1e-6).fit(X_train, Y_train)

grid_data = np.c_[xx.ravel(), yy.ravel()]
Z = logreg.predict_proba(grid_data)[:,1]
Z = Z.reshape(xx.shape)

yhat = logreg.predict_proba(Xtest)[:,1]
r = scipy.stats.pearsonr(yhat, ytest)[0]

plt.imshow(Z, extent=[xx.min(), xx.max(), yy.max(), yy.min()])

plt.plot(Xtest[ytest==0, 0], Xtest[ytest==0, 1], 'co')
plt.plot(Xtest[ytest==1, 0], Xtest[ytest==1, 1], 'ro')
plt.xlim(xx.min(), xx.max())
plt.ylim(yy.min(), yy.max())
plt.title('r=' + str(r))

plt.show()

当我使用大小为x:2的数据文件运行此代码时,它可以完美地运行

但我的数据列也多于2列。

12确切地说,对于那个python发送给我这个错误

Z = logreg.predict_proba(grid_data)[:,1]
  File "D:\IDE\Anaconda\lib\site-packages\sklearn\linear_model\logistic.py", line 128, in predict_proba
    return self._predict_proba_lr(X)
  File "D:\IDE\Anaconda\lib\site-packages\sklearn\linear_model\base.py", line 229, in _predict_proba_lr
    prob = self.decision_function(X)
  File "D:\IDE\Anaconda\lib\site-packages\sklearn\linear_model\base.py", line 196, in decision_function
    % (X.shape[1], n_features))
ValueError: X has 2 features per sample; expecting 12

不知怎的,我需要将grid_data设置为12列?!但我不知道如何

修改

添加了其余代码

1 个答案:

答案 0 :(得分:1)

您的模型适合12维数据(X_train.shape为(N,12)), 并且您正尝试对二维数据运行预测(查看grid_data的形状)。当模型适合12D特征时,预测2D特征的值是没有意义的。

我猜你的数据是作为该网格中的特征存在的,所以你可以做一些像最近的邻居那样从X_train检索所有网格点的最近输入点(如果你的数据完全位于网格上,然后查找应该减少到正确索引),然后将输出预测与网格点相关联。