[英]How to perform multivariable linear regression with scikit-learn?
原谅我的术语,我不是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中为线性回归算法提供特征矩阵?
您需要以其他方式创建xs
。 根据文档 :
fit(X, y, sample_weight=None)
参数:
X : numpy array or sparse matrix of shape [n_samples, n_features] Training data y : numpy array of shape [n_samples, n_targets] Target values sample_weight : numpy array of shape [n_samples] Individual weights for each sample
因此, xs
应该是一个2D数组,其行数与用户数相同,列数与网站部分相同。 您将xs
定义为3D数组。 为了将尺寸数减少一,您可以通过列表理解来摆脱节号:
xs = [[visit for section, visit in user] for user in xs]
如果这样做,您作为示例提供的数据将转换为:
xs = [[1, 0, 1, 0], # user1
[0, 1, 1, 0], # user2
...
]
和clf.fit(xs, ys)
应该可以正常工作。
减少维度的更有效方法是切片NumPy数组:
import numpy as np
xs = np.asarray(xs)[:,:,1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.