Python 如何知道我的数据是否拟合过度/拟合不足?

Python 如何知道我的数据是否拟合过度/拟合不足?,python,machine-learning,scikit-learn,regression,Python,Machine Learning,Scikit Learn,Regression,因此,我必须建立一个回归模型,根据11个输入来预测葡萄酒质量。目前我正在评估各种算法的均方误差、平均绝对误差和R2分数。我想决定使用哪种算法,但在此之前,我想确保我的数据没有被过度拟合/拟合不足。下面是我使用的数据集的链接(有点不同,但数据完全相同)以及我的整个代码 非常感谢您的帮助 数据: 另外,我复制了大部分代码的kagggle链接: 您可以对数据集使用交叉验证,以确定它是过度拟合还是不足拟合。如果在训练集上没有获得良好的精度,那么它将是欠拟合。若你们在训练集上获得了很好的准确性,但在看

因此,我必须建立一个回归模型,根据11个输入来预测葡萄酒质量。目前我正在评估各种算法的均方误差、平均绝对误差和R2分数。我想决定使用哪种算法,但在此之前,我想确保我的数据没有被过度拟合/拟合不足。下面是我使用的数据集的链接(有点不同,但数据完全相同)以及我的整个代码

非常感谢您的帮助

数据:

另外,我复制了大部分代码的kagggle链接:


您可以对数据集使用交叉验证,以确定它是过度拟合还是不足拟合。

如果在训练集上没有获得良好的精度,那么它将是欠拟合。若你们在训练集上获得了很好的准确性,但在看不见的/新的测试集上并没有,那个么它可能是过拟合了。这是检查装配不足和装配过度的简单方法之一。因此,请检查您在火车组和测试组上的模型的准确性。更好的提问地点:@desertnaut抱歉,我想既然有人能够指出一些我可以使用的代码,我会在这里提问。我理解这些概念,但不知道使用什么代码可以帮助我可视化不匹配/过匹配检查此链接@vbrises您的评论不仅是极好的建议,据我所知,这是将数据拆分为培训和测试数据集的主要原因之一。
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np

wine = pd.read_csv('wineQualityReds.csv', usecols=lambda x: 'Unnamed' not in x,)

wine.head()

y = wine.quality
X = wine.drop('quality',axis = 1)

from sklearn.model_selection import train_test_split
train_x,test_x,train_y,test_y = train_test_split(X,y,random_state = 0, stratify = y)

from sklearn import preprocessing
scaler = preprocessing.StandardScaler().fit(train_x)
train_x_scaled = scaler.transform(train_x)

test_x_scaled = scaler.transform(test_x)

from sklearn import model_selection
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.svm import SVR
from sklearn.metrics import mean_absolute_error

models = []
models.append(('DecisionTree', DecisionTreeRegressor()))
models.append(('RandomForest', RandomForestRegressor()))
models.append(('GradienBoost', GradientBoostingRegressor()))
models.append(('SVR', SVR()))
names = []

for name,model in models:
    kfold = model_selection.KFold(n_splits=5,random_state=2)
    cv_results = model_selection.cross_val_score(model,train_x_scaled,train_y, cv= kfold, scoring = 'neg_mean_absolute_error')
    names.append(name)
    msg  = "%s: %f" % (name, -1*(cv_results).mean())
    print(msg)


model = RandomForestRegressor()
model.fit(train_x_scaled,train_y)
pred_y = model.predict(test_x_scaled)

from sklearn import metrics

print('Mean Squared Error:', metrics.mean_squared_error(test_y, pred_y))  
print('Mean Absolute Error:', metrics.mean_absolute_error(test_y, pred_y))  
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(test_y, pred_y)))
print('R2:', metrics.r2_score(test_y, pred_y))