【问题标题】:Sklearn linear regression X and Y input formatSklearn 线性回归 X 和 Y 输入格式
【发布时间】:2015-06-10 07:25:59
【问题描述】:

我对 sklearn linear_model.LinearRegression(module) 的输入有一些疑问。

ages_train = [[20, 10000], [22, 12000], [22, 14000], [25, 17000], [30, 29000]]
net_worths_train = [10000, 12000, 14000, 17000, 29000]

reg = linear_model.LinearRegression()
reg.fit(ages_train, net_worths_train)

上述方法有效,但难以绘制。例如,这样做是行不通的:

plt.scatter(ages_train, net_worths_train, color = "b", label = "train data")

所以我想做的是输入这个:

ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50])
net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000])

但是这种数据格式不适用于 linear_model.LinearRegression 的 .fit() 函数。输入数据并使其易于绘制的正确方法是什么?使用 numpy 数组更可取吗?

【问题讨论】:

    标签: python scikit-learn linear-regression


    【解决方案1】:

    查看documentation for scikits.learn。您将看到 X 和 Y 需要分别是形状为 (n_samples, n_features) 和 (n_sample, n_targets) 的二维数组。即使您只有一个功能和一个目标,情况也是如此。

    你知道形状数组 (6, 1) 和形状数组 (6,) 的区别吗?一开始有点混乱,但第一个是真正的二维数组,恰好有一列,第二个是完全一维的数组。

    以下是将数据转换为二维数组的方法。是的,在处理这样的数字数据时,您应该使用 numpy,而不是列表。

    ages_train = np.array([20, 22, 25, 27, 30, 31, 31, 34, 42, 50])
    net_worths_train = np.array([10000, 12000, 16000, 20000, 30000, 33000, 34000, 38000, 49000, 60000])
    reg.fit(ages_train[:, np.newaxis], net_worths_train[:, np.newaxis])
    print reg.coef_, reg.intercept_
    

    顺便说一句,如果你真的只想做简单的线性回归,可以考虑np.polyfit(多项式拟合)或np.linalg.lstsq(广义最小二乘法)。这些更易于安装和使用。不过,Scikits-learn 具有更多功能和高级回归技术。

    【讨论】:

    • 这个:,np.newaxis - 或者更确切地说是它专门解决的问题scikit-learn api 需要一个单一的暗淡就足够的多暗淡数组 - 让我的生命缩短了几个月
    猜你喜欢
    • 2021-02-20
    • 2020-07-04
    • 2018-05-16
    • 2021-10-03
    • 2017-11-15
    • 2019-05-15
    • 2019-12-14
    • 2021-10-05
    • 2019-10-15
    相关资源
    最近更新 更多