这是我的代码,无论测试集的大小如何,它总是返回100%的准确率。我使用了train_test_split方法,所以我认为数据中不应该有重复。能有人检查一下我的代码吗?
from sklearn.tree import DecisionTreeClassifierimport numpy as npfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoredata = 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
回答:
编辑: 由于我发现了多个问题,我重新修改了我的回答。请复制粘贴下面的代码,以确保没有遗留任何错误。
问题 –
- 您在回归问题中使用了
DecisionTreeClassifier
而不是DecisionTreeRegressor
。 - 您在进行测试训练分割后移除了
nans
,这会打乱样本的数量。请在分割前执行data.dropna()
。 - 您错误地使用
model.score(X_test, y_test)
,传递了(X_test, predictions)
。请改用accuracy_score(X_test, predictions)
,或者修正语法。
from sklearn.tree import DecisionTreeRegressor #<---- 第一个问题import numpy as npfrom sklearn.model_selection import train_test_splitfrom sklearn.metrics import accuracy_scoredata = pd.read_csv('housing.csv')data = data.dropna() #<--- 第二个问题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) #<----- 第三个问题score