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
我有一个简单的代码,它在 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