住房机器学习错误:“支持的目标类型是:('binary','multiclass')。得到了'multilabel-indicator'”

Posted

技术标签:

【中文标题】住房机器学习错误:“支持的目标类型是:(\'binary\',\'multiclass\')。得到了\'multilabel-indicator\'”【英文标题】:Housing Machine Learning Error: "Supported target types are: ('binary', 'multiclass'). Got 'multilabel-indicator' instead"住房机器学习错误:“支持的目标类型是:('binary','multiclass')。得到了'multilabel-indicator'” 【发布时间】:2021-10-02 21:47:07 【问题描述】:

因此,我正在尝试制作一种机器学习算法来测试一些住房数据的cross_val_score,以确定哪种算法在确定住房价值方面最准确。我正在使用我之前所做的项目中显示的轮廓来预测鸢尾花的种类,尽管这个数据集要大得多,需要考虑更多的类别(这是506x14,最后是150x4)。

我期望 X 是所有值的数组,不包括最后一列,即房屋中值 Y。做了一个简单的拆分器,最初试图通过 cross_val_score 立即传递这些值。但是,我得到一个错误,该函数只接受二进制或多类并且它正在接收连续的。 Stack 上的一个答案说使用keras.utils.to_categorical 使数据二进制化,所以我尝试使用这些值。它抛出了错误Supported target types are: ('binary', 'multiclass'). Got 'multilabel-indicator' instead 我找到的唯一解决方案是将to_categorical 放在StratifiedKFold 之后,但这似乎并没有解决错误。

# Load dataset
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/housing.csv"
names = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
dataset = read_csv(url, names=names)
# Split-out validation dataset
array = dataset.values
X = array[:, 0:13]
y = array[:, 13]
X_train, X_validation, Y_train, Y_validation, = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
# Spot check Algorithms
models = []
models.append(('LR', LogisticRegression(solver='liblinear', multi_class='ovr')))
models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsClassifier()))
models.append(('CART', DecisionTreeClassifier()))
models.append(('NB', GaussianNB()))
models.append(('SVM', SVC(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
    kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)
    # convert class vectors to binary class matrices
    X_train = keras.utils.to_categorical(X_train, 0)
    X_validation = keras.utils.to_categorical(X_validation, 0)
    Y_train = keras.utils.to_categorical(Y_train, 0)
    Y_validation = keras.utils.to_categorical(Y_validation, 0)
    cv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring='accuracy')
    results.append(cv_results)
    names.append(name)
    print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparisons')
pyplot.show()

如果我的数据没有正确通过记分器,我们将不胜感激。

【问题讨论】:

【参考方案1】:

首先,我必须说分类回归是机器学习中不同的问题,你可以更多地了解它们here。

现在您正在使用为分类问题 (Iris) 开发的解决方案来解决回归问题 (Housing)。

你有两个选择

    以回归的形式解决问题(您使用的某些模型可能无法 有回归版本) 将您的问题转换为分类(已被问到here!)

这是我对第一个解决方案的实现,它是通过对您的代码进行少量更改来实现的;)

models = []
models.append(('LR', LinearRegression()))
# models.append(('LDA', LinearDiscriminantAnalysis()))
models.append(('KNN', KNeighborsRegressor()))
models.append(('CART', DecisionTreeRegressor()))
models.append(('NB', GaussianProcessRegressor()))
models.append(('SVM', SVR(gamma='auto')))
# evaluate each model in turn
results = []
names = []
for name, model in models:
    regr = model
    cv_results = cross_val_score(regr, X, y, cv=5)
    results.append(cv_results)
    names.append(name)
    print('%s: %f (%f)' % (name, cv_results.mean(), cv_results.std()))
# Compare Algorithms
pyplot.boxplot(results, labels=names)
pyplot.title('Algorithm Comparisons')
pyplot.show()

最后,train_test_splitcross_val_score 是评估模型质量的两种替代方法。不建议同时使用!

【讨论】:

非常感谢您!我什至不知道回归和分类之间有区别,但是在阅读了那个网站之后,它现在变得非常有意义,并且让我的旧代码看起来很傻。

以上是关于住房机器学习错误:“支持的目标类型是:('binary','multiclass')。得到了'multilabel-indicator'”的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实战——端到端的机器学习项目

机器学习实战读书笔记——端到端的机器学习项目

机器学习基础---过拟合问题及正则化技术

模式识别与机器学习——PART2 机器学习——统计学习基础——Regularized Linear Regression

线性回归的损失和优化,机器学习预测房价

小白学习keras教程一基于波士顿住房数据集训练简单的MLP回归模型