因此,
我是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:IDEAnacondalibsite-packagessklearnlinear_modellogistic.py", line 128, in predict_proba
return self._predict_proba_lr(X)
File "D:IDEAnacondalibsite-packagessklearnlinear_modelbase.py", line 229, in _predict_proba_lr
prob = self.decision_function(X)
File "D:IDEAnacondalibsite-packagessklearnlinear_modelbase.py", line 196, in decision_function
% (X.shape[1], n_features))
ValueError: X has 2 features per sample; expecting 12
不知怎么的,我需要将grid_data设置为具有12列?!但我不知道是怎么回事
编辑:
添加了代码的其余部分
您的模型适用于12维数据(X_train.shape为(N,12((,您正在尝试对二维数据进行预测(看看grid_data
的形状(。当模型适合12D特征时,预测2D特征的值是没有意义的。
我猜你的数据是作为该网格中的特征存在的,所以你可以做一些类似于最近邻居的事情,从X_train
中检索所有网格点的最近输入点(如果你的数据正好位于网格上,那么查找应该减少到正确索引(,然后将输出预测与网格点相关联。