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

时间:2014-06-11 03:19:10

标签: python numpy matplotlib scikit-learn regression

我一直在尝试使用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

当我分别在X和Y上使用numpy.size时,很明显是一个合理的错误:

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

有趣的是,拟合方法接受了两组数据。

我的问题是如何转换OneHotEncoder的输出以用于回归?

1 个答案:

答案 0 :(得分:0)

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

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

Y = theta * X

不幸的是,正如eickenberg所指出的那样,你无法使用matplotlibs散点调用来映射Y值的所有X特征,因此你会得到不兼容大小的错误信息,它想要绘制nxn not(nxm)x ñ

要解决您的问题,请尝试一次查看一个功能:

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。