如何使用 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 预测多类分类的主要内容,如果未能解决你的问题,请参考以下文章