如何在普通最小二乘回归图中使用OneHotEncoder输出



我一直在尝试使用scikit-learn库执行普通最小二乘回归,但又遇到了另一个问题。

我已经使用了OneHotEncoder来二进制化我的(独立)虚拟/分类特征,我有一个像这样的数组:

x = [[ 1.  0.  0. ...,  0.  0.  0.]
     [ 1.  0.  0. ...,  0.  0.  0.]
     [ 0.  1.  0. ...,  0.  0.  0.]
     ..., 
     [ 0.  0.  0. ...,  0.  0.  0.]
     [ 0.  0.  1. ...,  0.  0.  0.]
     [ 1.  0.  0. ...,  0.  0.  0.]]

因变量(Y)存储在一维数组中。一切都很好,除了现在当我要绘制这些值时,我得到了一个错误:

# Plot outputs
pl.scatter(x_test, y_test, color='black')

ValueError: x and y must be the same size

当我使用numpy。

>>> print np.size(x)
5096
>>> print np.size(y)
98

有趣的是,这两组数据都被拟合方法所接受。

我的问题是如何将OneHotEncoder的输出转换为在我的回归中使用?

如果我理解正确的话,你有你的X矩阵作为一个[m X n]矩阵的输入和一些[n X 1]的输出Y,其中m =特征数,n =数据点数。

首先,线性回归拟合函数并不关心X的维数是[m X n], Y的维数是[n X 1],因为它只使用一个维数为[1 X m]的参数,即

Y = theta * X

不幸的是,正如eickenberg所指出的那样,您不能像使用matplotlib分散调用那样根据Y值绘制所有X特征,因此您会得到大小不兼容的错误消息,它希望绘制n X n而不是(n X m) X n。

要解决这个问题,试着一次只看一个特性:

pl.scatter(x_test[:,0], y_test, color='black')

假设你已经标准化了你的数据(减去平均值并除以平均值),一种快速而肮脏的方法来查看趋势将是在单个轴上绘制所有它们:

fig = plt.figure(0)
ax = fig.add_subplot(111)
n, m = x_test.size
for i in range(m):
   ax.scatter(x_test[:,m], y_test)
plt.show()

要在独立的图形(取决于特征的数量)上同时可视化,然后查看,例如,subplot2grid例程或另一个python模块,如pandas。

相关内容

  • 没有找到相关文章

最新更新