所以,
我是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列?!但我不知道如何
修改
添加了其余代码
答案 0 :(得分:1)
您的模型适合12维数据(X_train.shape为(N,12)),
并且您正尝试对二维数据运行预测(查看grid_data
的形状)。当模型适合12D特征时,预测2D特征的值是没有意义的。
我猜你的数据是作为该网格中的特征存在的,所以你可以做一些像最近的邻居那样从X_train
检索所有网格点的最近输入点(如果你的数据完全位于网格上,然后查找应该减少到正确索引),然后将输出预测与网格点相关联。