我一直在尝试使用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的输出以用于回归?
答案 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。