Ab *_*ett 1 python modeling dataframe
如果我通过train_test_split函数使用数据运行一个简单的dtree回归模型,我会得到很好的r2得分和较低的mse值。
training_data = pandas.read_csv('data.csv',usecols=['y','x1','x2','x3'])
y = training_data.iloc[:,0]
x = training_data.iloc[:,1:]
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.33)
regressor = DecisionTreeRegressor(random_state = 0)
# fit the regressor with X and Y data
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
但是,如果我将数据文件手动拆分为两个文件2/3训练和1/3测试。有一个名为“人”的列,其值是1到9(即人),我使用1-6进行训练,并使用7-9进行测试
我的R2分数为负,且MSE高
training_data = pandas.read_csv("train"+".csv",usecols=['y','x1','x2','x3'])
testing_data = pandas.read_csv("test"+".csv", usecols=['y','x1','x2','x3'])
y_train = training_data.iloc[:,training_data.columns.str.contains('y')]
X_train = training_data.iloc[:,training_data.columns.str.contains('|'.join(['x1','x2','x3']))]
y_test = testing_data.iloc[:,testing_data.columns.str.contains('y')]
X_test = testing_data.iloc[:,testing_data.columns.str.contains('|'.join(l_vars))]
y_train = pandas.Series(y_train['y'], index=y_train.index)
y_test = pandas.Series(y_test['y'], index=y_test.index)
regressor = DecisionTreeRegressor(random_state = 0)
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
Run Code Online (Sandbox Code Playgroud)
我期望大致相同的结果,并且两个调用的所有数据类型似乎都相同。
我想念什么?
我假设这两个方法实际上都可以完成您打算做的事,并且X_train / test和y_train / tests的形状是相同的。您可以绘制数据集的基础分布,也可以将第二个实现与交叉验证的模型进行比较(以提高精确度)。
在初始训练-测试集中与第二个训练集中的标签(y)上绘制标签(y)的分布(即绘制条形图/密度图)(来自手动实施)。您可以更深入地研究数据,还可以在数据中绘制其他列,以查看关于数据分布的任何信息是否在两个实现的结果集之间有所不同。如果分布不同,那么两个模型之间会出现差异。如果差异很大,则可能是为手动实现对标签(或其他列)进行了实际排序,因此,您所比较的数据集中的分布非常不同。
另外,如果您要确保手动拆分结果是基于模型结果而不是基础数据分布的“代表性”集(可以很好地泛化),我会将其与交叉验证模型的结果进行比较,而不是一组结果。
从本质上讲,尽管可能性很小,并且train_test_split会造成一些改组,但是从本质上来说,您可能会获得一个“训练/测试”对,而运气很好。(为了减少不进行交叉验证的可能性,我建议使用stratify该train_test_split函数的参数。然后至少可以确保第一个实现“会更努力”以获取平衡的训练/测试对。)
如果决定交叉验证(与test_train_split),则可以获得折痕的平均模型预测和其周围的置信区间,并可以检查第二个模型结果是否在该区间内。如果没有再次出现,则仅意味着您的拆分实际上以某种方式“损坏”(例如,通过对值进行排序)。
PS我还要补充一点,决策树是已知过度拟合的模型[1]。也许改用随机森林?(由于引导程序/装袋,您应获得更稳定的结果,其作用类似于交叉验证,以减少过度拟合的机会。)
1- http://cv.znu.ac.ir/afsharchim/AI/lectures/Decision%20Trees%203.pdf
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |