gpt4 book ai didi

python - 如何使用 scikit-learn 执行多变量线性回归?

转载 作者:太空宇宙 更新时间:2023-11-04 00:48:16 26 4
gpt4 key购买 nike

请原谅我的术语,我不是机器学习专家。我可能会在下面使用错误的术语。

我正在尝试执行多变量线性回归。假设我正在尝试通过分析网站上的页面浏览量来确定用户性别。

对于我知道性别的每个用户,我有一个特征矩阵,其中每一行代表一个网站部分,第二个元素代表他们是否访问过它,例如:

male1 = [
[1, 1], # visited section 1
[2, 0], # didn't visit section 2
[3, 1], # visited section 3, etc
[4, 0]
]

所以在 scikit 中,我正在构建 xsys。我将男性表示为 1,将女性表示为 0。

以上将表示为:

features = male1
gender = 1

现在,我显然不只是为单个用户训练模型,而是我正在使用数万个用户的数据进行训练。

我本以为我应该按如下方式创建我的 xsys:

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。根据docs :

fit(X, y, sample_weight=None)

Parameters:

    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 应该是一个二维数组,其中的行数与用户一样多,列数与网站部分一样多。不过,您将 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]

关于python - 如何使用 scikit-learn 执行多变量线性回归?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325164/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com