原谅我的术语,我不是ML专业人士 . 我可能会使用下面的错误条款 .
我正在尝试执行多变量线性回归 . 假设我试图通过分析网站上的页面浏览量来计算用户性别 .
对于我知道性别的每个用户,我有一个特征矩阵,其中每一行代表一个网站部分,第二个元素是他们是否访问过它,例如:
male1 = [
[1, 1], # visited section 1
[2, 0], # didn't visit section 2
[3, 1], # visited section 3, etc
[4, 0]
]
所以在scikit中,我正在构建 xs
和 ys
. 我代表男性为1,女性为0 .
以上将表示为:
features = male1
gender = 1
现在,我显然不仅仅是为单个用户培训模型,而是我有成千上万的用户使用我用于培训的数据 .
我原本以为我应该按如下方式创建 xs
和 ys
:
xs = [
[ # user1
[1, 1],
[2, 0],
[3, 1],
[4, 0]
],
[ # user2
[1, 0],
[2, 1],
[3, 1],
[4, 0]
],
...
]
ys = [1, 0, ...]
scikit不喜欢这个:
from sklearn import linear_model
clf = linear_model.LinearRegression()
clf.fit(xs, ys)
它抱怨说:
ValueError: Found array with dim 3. Estimator expected <= 2.
我怎么能在scikit-learn中为线性回归算法提供特征矩阵?
1 回答
您需要以不同的方式创建
xs
. 根据docs:因此
xs
应该是一个2D数组,其行数与用户数相同,列数与网站部分数相同 . 您将xs
定义为3D数组 . 为了减少维度的数量,您可以通过列表理解去掉部分编号:如果这样做,您作为示例提供的数据将转换为:
和
clf.fit(xs, ys)
应该按预期工作 .降低尺寸的更有效方法是切割NumPy数组: