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

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

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

【问题讨论】:

    标签: python python-2.7 scikit-learn decision-tree


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2018-06-30
      • 2018-02-17
      • 2020-03-10
      • 2018-10-12
      • 2020-03-20
      • 2018-09-29
      • 2020-08-04
      • 2016-01-05
      • 2019-04-19
      相关资源
      最近更新 更多