房屋机器学习错误:”支持的目标类型为:(‘binary’, ‘multiclass’)。但得到的是’multilabel-indicator'”

我正在尝试创建一个机器学习算法来测试一些房屋数据的cross_val_score,以确定哪个算法在确定房屋价值方面最准确。我使用了之前项目中预测鸢尾花种类时展示的框架,尽管这个数据集要大得多,考虑的类别也更多(这是506x14,之前的是150x4)。

我期望X是所有值的数组,不包括最后一列,即房屋中位数值,Y。我使用了一个简单的分割器,最初尝试直接将这些值传递给cross_val_score。然而,我得到一个错误,指出该函数只接受二元或多类,而它接收的是连续数据。Stack上的一个回答建议使用keras.utils.to_categorical将数据转换为二元数据,所以我尝试了这种方法。但它抛出了错误支持的目标类型为:('binary', 'multiclass')。但得到的是'multilabel-indicator'。我找到的唯一解决方案是在StratifiedKFold之后使用to_categorical,但这似乎并没有解决错误。

# 加载数据集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)# 分割验证数据集array = dataset.valuesX = 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)# 尝试不同算法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')))# 依次评估每个模型results = []names = []for name, model in models:    kfold = StratifiedKFold(n_splits=10, random_state=1, shuffle=True)    # 将类向量转换为二元类矩阵    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()))# 比较算法pyplot.boxplot(results, labels=names)pyplot.title('Algorithm Comparisons')pyplot.show()

任何帮助都将非常感激,以便找出为什么我的数据无法正确通过评分器。


回答:

首先,必须指出,分类回归是机器学习中的不同问题,你可以在这里了解更多这里

现在,你正在用为分类问题(鸢尾花)开发的解决方案来解决回归问题(房屋)。

你有两个选择

  1. 以回归方式解决问题(你使用的一些模型可能没有回归版本)
  2. 将你的问题转换为分类(这个问题在这里被问到过这里!)

这是我对第一个解决方案的实现,只对你的代码做了小的修改;)

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')))# 依次评估每个模型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()))# 比较算法pyplot.boxplot(results, labels=names)pyplot.title('Algorithm Comparisons')pyplot.show()

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

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注