python - Sklearn分类与DecisionTree,如何提高拟合?
问题描述
这是我第一次进行数据分析,我正在尝试执行分类问题。我试图预测汽车的价格。我有以下 DataFrame(已清理):
price vehicleType yearOfRegistration gearbox powerPS model kilometer fuelType brand notRepairedDamage
2 9000 suv 2004 automatik 163 grand 125000 diesel jeep not-declared
3 1500 kleinwagen 2001 manuell 75 golf 150000 benzin volkswagen nein
4 3000 kleinwagen 2008 manuell 69 fabia 90000 diesel skoda nein
6 1500 cabrio 2004 manuell 109 2_reihe 150000 benzin peugeot nein
8 12500 bus 2014 manuell 125 c_max 30000 benzin ford not-declared
... ... ... ... ... ... ... ... ... ... ...
371520 3000 limousine 2004 manuell 225 leon 150000 benzin seat ja
371524 1000 cabrio 2000 automatik 101 fortwo 125000 benzin smart nein
371525 9000 bus 1996 manuell 102 transporter 150000 diesel volkswagen nein
371526 3000 kombi 2002 manuell 100 golf 150000 diesel volkswagen not-declared
371527 25000 limousine 2013 manuell 320 m_reihe 50000 benzin bmw nein
因此,如您所见,存在分类属性。因此我必须对它们进行编码。我是这样做的:
encoding = DataFrameMapper([
(['vehicleType', 'gearbox', 'model', 'fuelType', 'brand', 'notRepairedDamage'],
OneHotEncoder(handle_unknown='ignore')),
(["yearOfRegistration", "powerPS", "kilometer"], OneHotEncoder(handle_unknown='ignore'))
])
encoding_target = DataFrameMapper([
(['price'], None)
])
在这里我应该提到我有一个名为“名称”的列,其中包含汽车的名称和可选内容。我不得不放弃它,因为数据帧有 250k 行,如果我也尝试对该列进行编码,我会得到内存错误。
然后我进行了拟合和改造:
encoding.fit(data)
encoding_target.fit(data)
X = encoding.transform(data.loc[:, data.columns != "price"])
y = encoding_target.transform(data[['price']])
然后我创建了训练/测试拆分
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .2, random_state = 0)
然后将决策树构造函数称为:
tree = DecisionTreeClassifier()
tree.fit(X_train, y_train)
y_pred = tree.predict(X_test)
accuracy_score(y_test, y_pred)
我的分数是 0.38。这真的很低。所以,我想问你问题是否在于我如何编码数据帧以将其与 sklearn 一起使用。是的,有没有更好的方法?这样我也有交叉验证的问题,我不觉得数据框完全可以与其他算法一起使用。谢谢 :)
解决方案
如果您要预测汽车的价格price
,那么它是您的目标特征,因此通常是回归问题,而不是分类问题。分类模型不知道 1000 比 25000 更接近 1500 - 它只是将它们视为单独的类。您的模型在预测价格类别时的准确度为 0.38。
试试DecisionTreeRegressor()
吧。您可以查看其中一些指标:https ://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics
推荐阅读
- reactjs - 如何在 TypeScript 中为 React 组件道具提供泛型类型参数
- encryption - iOS MSAL 库标记为不安全的加密加密算法
- list - 从列表中删除用户定义的项目
- visual-studio-code - 有没有办法在运行不同操作系统的单独机器上强制同步 Visual Studio Code 扩展?
- excel - MATCH 函数找不到相等的单元格
- amazon-ec2 - 如何查找我的 AWS 负载均衡器用于创建实例的 IP 地址范围?
- typescript - 使用接口的 Typescript 依赖反转
- javascript - 处理程序内的火灾事件
- android - 如何更改 Xamarin RemoteView 中的 TextBox 背景颜色
- python - PCA 无法在 CNN 的整个训练集上运行