如何在普通最小二乘回归图中使用 OneHotEncoder 输出
Posted
技术标签:
【中文标题】如何在普通最小二乘回归图中使用 OneHotEncoder 输出【英文标题】:How to use OneHotEncoder output in ordinary least squares regression plot 【发布时间】:2014-07-31 23:46:34 【问题描述】:我一直在尝试使用 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
有趣的是,这两组数据都被fit方法接受了。
我的问题是如何转换 OneHotEncoder 的输出以用于我的回归?
【问题讨论】:
您需要一个x_test.shape[1] + y_test.shape[1]
维散点图来可视化您的数据……我认为这不会发生。如果y
也是分类的,请尝试使用类似于mosaicplot
的内容从R
进行可视化。我不明白为什么不能散点图你的数据会阻止你对它进行回归。
感谢您回复我。仍然坚持这一点。由于 x 数组中的每个子列表都代表一个特征 - 我可以为 x 使用某种虚拟变量吗?只是不确定如何将系数映射到新变量并在图中使用它们。有任何想法吗?也是的,你是对的,回归当然有效——我的意思是说“在我的情节中使用”。谢谢。
【参考方案1】:
如果我理解正确,您的 X 矩阵作为 [mxn] 矩阵的输入和 [nx 1] 的一些输出 Y,其中 m = 特征数,n = 数据点数。
首先,线性回归拟合函数不会关心 X 的维度是 [m x n] 和 Y 的维度是 [n x 1],因为它会简单地使用维度 [1 x m] 的参数,即,
Y = theta * X
不幸的是,正如 eickenberg 所指出的,您无法像使用 matplotlibs scatter 调用那样根据 Y 值绘制所有 X 特征,因此您会收到尺寸不兼容的错误消息,它想要绘制 nxn 而不是 (nxm) 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)。
【讨论】:
以上是关于如何在普通最小二乘回归图中使用 OneHotEncoder 输出的主要内容,如果未能解决你的问题,请参考以下文章
R语言普通最小二乘(OLS)回归说明以及构建普通最小二乘(OLS)回归需要满足的四个假设(Normality(正态性)Independence(独立性)Linearity(线性度)方差齐性)