当 Scikit 线性模型返回负值时?

Posted

技术标签:

【中文标题】当 Scikit 线性模型返回负值时?【英文标题】:When Scikit linear models return negative value for score? 【发布时间】:2015-08-21 22:16:07 【问题描述】:

我是机器学习的新手,正在尝试实现线性模型估计器,以提供 Scikit 来预测二手车的价格。我使用了不同的线性模型组合,例如LinearRegressionRidgeLassoElastic Net,但在大多数情况下,它们都返回负分(-0.6

有人告诉我这是因为多重共线性问题,但我不知道如何解决。

我的示例代码:

import numpy as np
import pandas as pd
from sklearn import linear_model
from sqlalchemy import create_engine
from sklearn.linear_model import Ridge

engine = create_engine('sqlite:///path-to-db')

query = "SELECT mileage, carcass, engine, transmission, state, drive, customs_cleared, price FROM cars WHERE mark='some mark' AND model='some model' AND year='some year'"
df = pd.read_sql_query(query, engine)
df = df.dropna()
df = df.reindex(np.random.permutation(df.index))

X_full = df[['mileage', 'carcass', 'engine', 'transmission', 'state', 'drive', 'customs_cleared']]
y_full = df['price']

n_train = -len(X_full)/5
X_train = X_full[:n_train]
X_test = X_full[n_train:]
y_train = y_full[:n_train]
y_test = y_full[n_train:]

predict = [200000, 0, 2.5, 0, 0, 2, 0] # parameters of the car to predict

model = Ridge(alpha=1.0)
model.fit(X_train, y_train)
y_estimate = model.predict(X_test)

print("Residual sum of squares: %.2f" % np.mean((y_estimate - y_test) ** 2))
print("Variance score: %.2f" % model.score(X_test, y_test))
print("Predicted price: ", model.predict(predict))

胴体、状态、驱动器和清关是数字并代表类型。

实施预测的正确方法是什么?也许是一些数据预处理或不同的算法。

感谢您的提前!

【问题讨论】:

样本外 R^2 得分可能为负数,例如信号均值估计错误。 【参考方案1】:

鉴于您使用的是岭回归,您应该使用 StandardScaler 或 MinMaxScaler 缩放变量:

http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling

也许使用管道:

http://scikit-learn.org/stable/modules/pipeline.html#pipeline-chaining-estimators

如果您使用的是普通回归,那么缩放就无关紧要了;但是使用岭回归,正则化惩罚项 ​​(alpha) 将以不同方式处理不同比例的变量。请参阅有关统计信息的讨论:

https://stats.stackexchange.com/questions/29781/when-should-you-center-your-data-when-should-you-standardize

【讨论】:

以上是关于当 Scikit 线性模型返回负值时?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn的线性回归模型

用scikit学习线性模型约束系数总和

使用 scikit-learn 为 NER 训练 NLP 对数线性模型

如何使用 scikit 线性回归模型同时求解多个独立的时间序列

如何在不拟合的情况下实例化具有已知系数的 Scikit-Learn 线性模型

使用 scikit-learn 训练线性回归模型后,如何对原始数据集中不存在的新数据点进行预测?