如何使用ExtraTreeClassifier来预测多类分类

时间:2016-09-11 17:16:47

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

我对机器学习技术很陌生,而且我在查看一些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.我缺少什么?

1 个答案:

答案 0 :(得分:1)

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

有两种可能的方法:

答:您使用“label binarize”

  • 二值化转换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

相关问题