如何使用 ExtraTreeClassifier 预测多类分类

How to use ExtraTreeClassifier to predict multiclass classifications

我对机器学习技术还很陌生,我在理解一些 scikit-learn 文档和其他 Whosebug 帖子时遇到了问题。我正在尝试从一堆医疗数据中创建一个简单的模型这将帮助我预测患者可能会陷入三个 类 中的哪一个。

我通过 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。我错过了什么?

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

有两种可能的方法:

答:你用"label binarize"

  • 二值化转换 y=[n_samples, ] -> y[n_samples, n_classes](添加 1 个维度;范围 (0, X) 中的整数转换为二进制值)
  • 由于此输入适合,classifier.predict() 也将 return 形式为 [n_predict_samples, n_classes] 的结果(只有 0 和 1 作为值)/ 那是你观察到了什么!
  • 示例输出:[[0 0 0 1], [1 0 0 0], [0 1 0 0]] = class 的预测:3、0、1

B:你跳过"label binarize"(多class处理由sklearn自动完成)

  • 没有二值化(假设您的数据使用 classes 的整数标记):y=[n_samples, ]
  • 由于此输入适合,classifier.predict() 也将 return 形式为 [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.

备注:以上行为应该对most/all classifiers有效! (不仅 ExtraTreesClassifier