我对机器学习技术很陌生,而且我在查看一些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.我缺少什么?
答案 0 :(得分:1)
这是scikit-learn中的正常行为。
有两种可能的方法:
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 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 )