Python Scikit学习二值化分类数据

Python Scikit学习二值化分类数据,python,scikit-learn,categorical-data,Python,Scikit Learn,Categorical Data,我一直试图通过pandas将一个CSV文件加载到scikit中,并将目标列设置为包含20个分类变量的列表。我尝试过使用label_binarize,但似乎没有任何效果,所以在阅读了一些内容后,我切换到LabelEncoder,但似乎没有太大变化 from io import StringIO import matplotlib.pyplot as plt from sklearn.metrics import accuracy_score from sklearn.model_selection

我一直试图通过pandas将一个CSV文件加载到scikit中,并将目标列设置为包含20个分类变量的列表。我尝试过使用label_binarize,但似乎没有任何效果,所以在阅读了一些内容后,我切换到LabelEncoder,但似乎没有太大变化

from io import StringIO
import matplotlib.pyplot as plt
from sklearn.metrics import accuracy_score
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import permutation_test_score
from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc, confusion_matrix
from sklearn.model_selection import train_test_split, ShuffleSplit
from sklearn.preprocessing import label_binarize, MultiLabelBinarizer, LabelEncoder
from sklearn.multiclass import OneVsRestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.naive_bayes import GaussianNB

#loading the data
data=pd.read_csv("data.csv")
y = data.iloc[:,19]
X = data.iloc[:,1:18+20:22]

#Binarize the output
le = LabelEncoder()
le.fit(["0-1","1-1.5","1.5-2","2-2.5","2.5-3","3-3.5","3.5-4","4-4.5","4.5-5","5-5.5","5.5-6","6-6.5","6.5-7","7-7.5","7.5-8","8-8.5","8.5-9","9-9.5","9.5-10","10+"
])
LabelEncoder()
le.transform(y)
y = label_binarize(y, le)
n_classes = y.shape[1]

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5,
                                                random_state=0)

model3 = KNeighborsClassifier(n_neighbors=7)
然而,当我运行此程序时,我得到:

Traceback (most recent call last):
File "file, line 30, in <module>
le.transform(y)
File "C:\Anaconda3\lib\site-packages\sklearn\preprocessing\label.py", line 149, in transform
classes = np.unique(y)
File "\Anaconda3\lib\site-packages\numpy\lib\arraysetops.py", line 198, in unique
ar.sort()
TypeError: '>' not supported between instances of 'str' and 'float'
回溯(最近一次呼叫最后一次):
“文件”文件,第30行,在
变换(y)
文件“C:\Anaconda3\lib\site packages\sklearn\preprocessing\label.py”,第149行,在转换中
类别=np.唯一(y)
文件“\Anaconda3\lib\site packages\numpy\lib\arraysetops.py”,第198行,唯一格式
ar.sort()
TypeError:“>”在“str”和“float”的实例之间不受支持

scikit是否可以使用这种目标数据?

好的,为了解决这个问题,我发现需要用引号将分类数据本身括起来,如:“0-1”


否则Python会将其读取为0-1的长度,并将其混淆。数据加载正确。

您能发布完整的代码吗?您发布的代码与错误堆栈跟踪不匹配。@VivekKumar我添加了一些额外的内容,添加其余内容没有实际意义,因为它在运行模型之前失败。哪个版本您正在使用的scikit的值?还显示一些y的示例。您确定这些值来自您在le.fit()中使用的值吗。如果我从中获取y值,那么它对我来说就像预期的一样。此外,LabelEncoder只会将字符串转换为整数到数字。不会对它们进行二值化。要进行二值化,必须使用label_二值化或LabelBinarizer。顺便说一句,大多数scikit估计器(包括KNeighborsClassifier)将处理目标(y)中的字符串没有任何问题。那么为什么需要在您的场景中对它们进行编码呢?@VivekKumar找到了问题所在,用引号将实际数据括起来,使其能够识别为字符串。