如何使用 ExtraTreeClassifier 预测多类分类

Posted

技术标签:

【中文标题】如何使用 ExtraTreeClassifier 预测多类分类【英文标题】:How to use ExtraTreeClassifier to predict multiclass classifications 【发布时间】:2017-01-19 04:53:50 【问题描述】:

我对机器学习技术还很陌生,我在阅读一些 scikit-learn 文档和其他 *** 帖子时遇到了麻烦。我正在尝试从一堆医疗数据中创建一个简单的模型,该模型将帮助我预测患者可能属于三个类别中的哪一个。

我通过 pandas 加载数据,将所有对象转换为整数(例如 Male = 0,Female=1),然后运行以下代码:

import numpy as np
import pandas as pd
from sklearn.cross_validation import train_test_split
from sklearn.preprocessing import label_binarize
from sklearn.ensemble import ExtraTreesClassifier

# Upload data file with all integers:
data = pd.read_csv('datafile.csv')

y = data["Target"]
features = list(data.columns[:-1]) # Last column being the target data
x = data[features]

ydata = label_binarize(y, classes=[0, 1, 2])
n_classes = ydata.shape[1]
X_train, X_test, y_train, y_test = train_test_split(x, ydata, test_size=.5)

model2 = ExtraTreesClassifier()
model2.fit(X_train, y_train)

out = model2.predict(X_test)
print np.min(out),np.max(out)

out 的预测值介于 0.0 和 1.0 之间,但我试图预测的类是 0,1 和 2。我错过了什么?

【问题讨论】:

【参考方案1】:

这是 scikit-learn 中的正常行为。

有两种可能的方法:

A:你使用“标签二值化”

二值化变换 y=[n_samples, ] -> y[n_samples, n_classes](添加 1 维;范围 (0, X) 中的整数被转换为二进制值) 由于此输入适合,classifier.predict() 还将返回 [n_predict_samples, n_classes] 形式的结果(只有 0 和 1 作为唯一值)/这就是您所观察到的! 示例输出:[[0 0 0 1], [1 0 0 0], [0 1 0 0]] = 类别预测:3、0、1

B:您跳过“标签二值化”(sklearn 自动完成多类处理)

没有二值化(假设您的数据对类使用整数标记):y=[n_samples, ] 由于适合此输入,classifier.predict() 还将返回 [n_predict_samples, ] 形式的结果(可能具有除 0、1 以外的其他值) 示例输出符合上述示例:[3 0 1]

文档here 中提到了这两个输出:

predict(X)

Returns:    
    y : array of shape = [n_samples] or [n_samples, n_outputs]
        The predicted classes.

备注:上述行为应该对大多数/所有分类器都有效! (不仅是ExtraTreesClassifier

【讨论】:

以上是关于如何使用 ExtraTreeClassifier 预测多类分类的主要内容,如果未能解决你的问题,请参考以下文章

如何安装以前版本的 SciKit?

[精选] Mysql分表与分库如何拆分,如何设计,如何使用

如果加入条件,我该如何解决。如果使用字符串连接,我如何使用

如何使用本机反应创建登录以及如何验证会话

如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]

如何使用 AngularJS 的 ng-model 创建一个数组以及如何使用 jquery 提交?