在Python中将分类数据转换为数值数据

时间:2019-10-07 13:02:51

标签: python machine-learning encoding nlp categorical-data

我有一个数据集。其列之一-“关键字”-包含分类数据。我尝试使用的机器学习算法仅接受数字数据。我想将“关键字”列转换为数值-如何做到这一点?使用NLP吗?一袋字吗?

我尝试了以下操作,但得到了ValueError: Expected 2D array, got 1D array instead

from sklearn.feature_extraction.text import CountVectorizer
count_vector = CountVectorizer()
dataset['Keyword'] = count_vector.fit_transform(dataset['Keyword'])
from sklearn.model_selection import train_test_split
y=dataset['C']
x=dataset(['Keyword','A','B'])
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=0)
from sklearn.linear_model import LinearRegression
regressor=LinearRegression()
regressor.fit(x_train,y_train)

1 个答案:

答案 0 :(得分:1)

您可能想使用编码器。 LabelEncoderOneHotEncoder是最常用和最受欢迎的工具之一。两者均作为sklearn库的一部分提供。

LabelEncoder 可用于将分类数据转换为整数:

from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
x = ['Apple', 'Orange', 'Apple', 'Pear']
y = label_encoder.fit_transform(x)
print(y)

array([0, 1, 0, 2])

这会将['Apple','Orange','Apple','Pear']的列表转换为[0、1、0、2],每个整数对应一个项目。这对于ML而言并不总是理想的,因为整数具有不同的数值,这表明一个大于另一个,例如Pear> Apple,但事实并非如此。为了不引入此类问题,您需要使用OneHotEncoder。

OneHotEncoder 可用于将分类数据转换为一个热编码数组。使用OneHotEncoder编码先前定义的y会导致:

from numpy import array
from numpy import argmax
from sklearn.preprocessing import OneHotEncoder
onehot_encoder = OneHotEncoder(sparse=False)
y = y.reshape(len(y), 1)
onehot_encoded = onehot_encoder.fit_transform(y)
print(onehot_encoded)

[[1. 0. 0.]
[0. 1. 0.]
[1. 0. 0.]
[0. 0. 1.]]

x的每个元素变成一个零数组,只有一个1编码该元素的类别。

有关如何在DataFrame can be found here上使用它的简单教程。