我有一个使用 scikit-learn 库的 python 机器学习项目。我有两个单独的数据集用于训练和测试,我尝试进行线性回归。我使用如下所示的代码块:
import numpy as np
import pandas as pd
import scipy
import matplotlib.pyplot as plt
from pylab import rcParams
import urllib
import sklearn
from sklearn.linear_model import LinearRegression
df =pd.read_csv("TrainingData.csv")
df2=pd.read_csv("TestingData.csv")
df['Development_platform']= ["".join("%03d" % ord(c) for c in s) for s in df['Development_platform']]
df['Language_Type']= ["".join("%03d" % ord(c) for c in s) for s in df['Language_Type']]
df2['Development_platform']= ["".join("%03d" % ord(c) for c in s) for s in df2['Development_platform']]
df2['Language_Type']= ["".join("%03d" % ord(c) for c in s) for s in df2['Language_Type']]
X_train = df[['AFP','Development_platform','Language_Type','Resource_Level']]
Y_train = df['Effort']
X_test=df2[['AFP','Development_platform','Language_Type','Resource_Level']]
Y_test=df2['Effort']
lr = LinearRegression().fit(X_train, Y_train)
print("lr.coef_: {}".format(lr.coef_))
print("lr.intercept_: {}".format(lr.intercept_))
print("Training set score: {:.2f}".format(lr.score(X_train, Y_train)))
print("Test set score: {:.7f}".format(lr.score(X_test, Y_test)))
我的结果是: lr.coef_: [ 2.32088001e+00 2.07441948e-12 -4.73338567e-05 6.79658129e+02]
lr.intercept_: 2166.186033098048
训练集得分:0.63
测试集分数:0.5732999
你有什么建议?我怎样才能提高我的准确性? (添加代码、参数等)我的数据集在这里: https ://yadi.sk/d/JJmhzfj-3QCV4V
原文由 f.koglu 发布,翻译遵循 CC BY-SA 4.0 许可协议
我将通过一些示例详细说明@GeorgiKaradjov 的回答。您的问题非常广泛,并且有多种方法可以获得改进。最后,拥有领域知识(上下文)将为您提供获得改进的最佳机会。
1) 归一化数据
给予
2) 分类特征编码
给予
3) 特征工程;共线性
您想要
y=x
的红线,因为值应该与其自身相关。但是,任何红色或蓝色列都表明存在需要更多调查的强相关/反相关。例如,Resource=1,Resource=4,在某种意义上可能是高度相关的,如果人们拥有 1,则拥有 4 的可能性较小,等等。回归假设所使用的参数彼此独立。3) 特征工程;高阶项
也许你的模型太简单了,你可以考虑添加高阶和交叉项:
我对此进行了快速尝试,我认为高阶项没有太大帮助。您的数据也可能是 非线性 的,快速
logarithm
或 Y 输出给出更差的拟合,表明它是线性的。你也可以看看实际情况,但我太懒了。。。4) 正则化
尝试使用 sklearn 的 RidgeRegressor 并使用 alpha:
5) 备选机型
有时线性回归并不总是适用。例如,随机森林回归器可以很好地执行,并且通常对标准化数据和分类/连续数据不敏感。其他模型包括 XGBoost 和 Lasso(具有 L1 正则化的线性回归)。
把它们放在一起
我被带走了,开始研究你的问题,但在不了解这些特性的所有上下文的情况下无法对其进行太多改进:
导致:
您可以查看变量的重要性(值越高,越重要)。
您可以开始查看超参数以获得改进: http ://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV