sklearn:何时使用单热编码/输出变量范围

sklearn: when to use one-hot encoding / range of output variables

我有一个简单的代码,它在 X 中具有输入特征,在 y 中具有输出标签,其中每个 y_i 都在集合 {1,2,3,4} 中。我想在 sklearn 中使用 SVM 或 Logistic Regression 进行分类。我的问题是:sklearn 什么时候需要单热编码?如果我使用 SVM,y 会照原样好还是 SVM 只处理布尔输出?此外,非常令人沮丧的是,sklearn(SVM 或逻辑回归)中没有文档指定有效输出的范围。

应该没问题。在 sklearn the label encoder 中,如果你的 class 标签是 a、b、c、d,通常将其编码为 0、1、2、3。 Onehot 编码通常用于转换您的自变量。

您要找的是多class class化。它在 svm and logistic regression.

中都实现了

我们以鸢尾花数据集为例:

import seaborn as sns
import pandas as pd
data = sns.load_dataset('iris')
from sklearn.preprocessing import StandardScaler,LabelEncoder

data.head()
Out[5]: 
   sepal_length  sepal_width  petal_length  petal_width species
0           5.1          3.5           1.4          0.2  setosa
1           4.9          3.0           1.4          0.2  setosa
2           4.7          3.2           1.3          0.2  setosa
3           4.6          3.1           1.5          0.2  setosa
4           5.0          3.6           1.4          0.2  setosa

y = LabelEncoder().fit_transform(data['species'])+1
pd.value_counts(y)
Out[42]: 
1    50
2    50
3    50


X = StandardScaler().fit_transform(data.iloc[:,:4])

现在适合后勤:

from sklearn.linear_model import LogisticRegression

lr = LogisticRegression().fit(X,y)

# confusion matrix
pd.crosstab(lr.predict(X) , y)

col_0   1   2   3
row_0            
1      50   0   0
2       0  47   1
3       0   3  49

和支持向量机:

from sklearn import svm
clf = svm.SVC().fit(X, y)
pd.crosstab(clf.predict(X) , y)

col_0   1   2   3
row_0            
1      50   0   0
2       0  48   2
3       0   2  48