【问题标题】:Python DecisionTreeRegressorPython 决策树回归器
【发布时间】:2020-03-03 09:34:15
【问题描述】:

我尝试了以下代码,但我一直出现这个错误

DataSet 的链接在下面的链接中

值错误 ---> 第 18 行 ds1_model.fit(X, y)

ValueError: 无法将字符串转换为浮点数:'Iris-setosa'

  import pandas as pd
from sklearn.metrics import mean_absolute_error
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split

url = 'https://raw.githubusercontent.com/jbrownlee/Datasets/master/iris.csv'
ds1 = pd.read_csv(url)
ds1.columns = (['SepalLength' , 'SepalWidth' , 'PetalLength' , 'PetalWidth' , 'ClassLabel'])
ds1_filtered=ds1.dropna(axis=0)

y = ds1_filtered.ClassLabel

ds1_features = ['SepalLength' , 'SepalWidth' , 'PetalLength' , 'PetalWidth']
X = ds1_filtered[ds1_features]

ds1_model = DecisionTreeRegressor()

ds1_model.fit(X, y)

PredictedClassLabel = ds1_model.predict(X)
mean_absolute_error(y, PredictedClassLabel)

train_X, val_X, train_y, val_y = train_test_split(X, y, random_state = 0)
ds1_model = DecisionTreeRegressor()
ds1_model.fit(train_X, train_y)

predicitions = ds1_model.predict(val_X)
print(mean_absolute_error(val_y, predictions))

您能否提供建议或解释如何解决此问题?

DataSet Link

【问题讨论】:

    标签: python machine-learning scikit-learn


    【解决方案1】:

    正如名称ClassLabel 所暗示的那样,iris 数据集是一个分类,而不是一个回归;因此,DecisionTreeRegressor 既不是要使用的正确模型,mean_absolute_error 也不是正确的指标。

    您应该改用DecisionTreeClassifieraccuracy_score

    from sklearn.datasets import load_iris
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.metrics import accuracy_score
    
    iris = load_iris()
    clf = DecisionTreeClassifier()
    
    train_X, val_X, train_y, val_y = train_test_split(iris.data, iris.label, random_state = 0)
    clf.fit(train_X, train_Y)
    
    pred = clf.predict(val_X)
    print(accuracy_score(val_y, pred))
    

    使用上述数据集的 scikit-learn decision tree classification tutorial 可以给你更多的想法。

    【讨论】:

    • 100% 正确,但可能还值得一提的是,具体错误是由于 sklearn 模型(分类或回归两者)不能接受字符串输入,目标需要是以某种方式编码为数字类型
    • 你建议使用什么?如果我将 ClassLabels 转换为数字来表示每个字符串然后应用回归,是否有可能?
    • 我看到了.. 非常感谢您的澄清 accuracy_score 相当于 mean_absolute_error
    • @Sam 肯定是等价的;既然答案解决了您的问题,请接受它 - 请参阅What should I do when someone answers my question?
    • @desertnaut 你能看看这个问题吗? stackoverflow.com/q/58900947/5904928我挣扎了好几个小时,找不到答案。
    猜你喜欢
    • 1970-01-01
    • 2018-09-02
    • 2021-03-17
    • 1970-01-01
    • 2021-04-14
    • 2021-10-03
    • 2018-08-18
    • 2019-12-23
    • 2018-10-20
    相关资源
    最近更新 更多