在我的决策树模型上获得 100% 的准确度
Posted
技术标签:
【中文标题】在我的决策树模型上获得 100% 的准确度【英文标题】:Getting 100% Accuracy on my DecisionTree Model 【发布时间】:2021-03-06 11:39:48 【问题描述】:这是我的代码,无论测试规模有多大,它总是返回 100% 的准确率。我使用了 train_test_split 方法,所以我认为不应该有任何重复的数据。有人可以检查我的代码吗?
from sklearn.tree import DecisionTreeClassifier
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
data = pd.read_csv('housing.csv')
prices = data['median_house_value']
features = data.drop(['median_house_value', 'ocean_proximity'], axis = 1)
prices.shape
(20640,)
features.shape
(20640, 8)
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=42)
X_train = X_train.dropna()
y_train = y_train.dropna()
X_test = X_test.dropna()
y_test = X_test.dropna()
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
y_train.shape
(16512,)
X_train.shape
(16512, 8)
predictions = model.predict(X_test)
score = model.score(y_test, predictions)
score
【问题讨论】:
“不管测试规模有多大”是什么意思?我怀疑如果您将测试大小设置为 90% 的数据,该模型仍然会给您 100% 的准确度。此外,在一个简单的数据集上获得 100% 的准确率并不是什么大问题。我关心的是为什么您使用Decision tree classifier
而不是Decision tree regressor
进行房价分类。也许这就是你的答案。
为什么是DecisionTreeClassifier()
?这不是回归问题吗?
请注意,这不是过拟合。过度拟合是指您的训练准确度很高但验证准确度相对较低。这表明您的模型非常适合您的训练数据,但不能泛化到看不见的数据。
【参考方案1】:
编辑:我已经修改了我的答案,因为我发现了多个问题。请复制粘贴以下代码以确保不留下任何错误。
问题 -
-
您正在使用
DecisionTreeClassifier
而不是 DecisionTreeRegressor
来解决回归问题。
在进行测试列车拆分后,您将删除 nans
,这会弄乱样本数。在拆分前执行data.dropna()
。
您通过传递(X_test, predictions)
错误地使用了model.score(X_test, y_test)
。请改用 accuracy_score(X_test, predictions)
和这些参数,或修正语法。
from sklearn.tree import DecisionTreeRegressor #<---- FIRST ISSUE
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
data = pd.read_csv('housing.csv')
data = data.dropna() #<--- SECOND ISSUE
prices = data['median_house_value']
features = data.drop(['median_house_value', 'ocean_proximity'], axis = 1)
X_train, X_test, y_train, y_test = train_test_split(features, prices, test_size=0.2, random_state=42)
model = DecisionTreeRegressor()
model.fit(X_train, y_train)
predictions = model.predict(X_test)
score = accuracy_score(y_test, predictions) #<----- THIRD ISSUE
score
【讨论】:
这仍然返回 100% 准确度 能否将您的测试数据大小更改为 0.9 并告诉我会发生什么? 它仍然以 0.9 个测试数据返回 100% 的准确度。 没关系,我发现了你的问题。请检查 model.score 声明。你使用不正确。检查我更新的评论。让我知道它是否修复它。 返回ValueError: y_true and y_pred has different number of output (8!=1)以上是关于在我的决策树模型上获得 100% 的准确度的主要内容,如果未能解决你的问题,请参考以下文章