Преобразование категориальных данных в числовые данные в Python - PullRequest
1 голос
/ 07 октября 2019

У меня есть набор данных. Один из его столбцов - «Ключевое слово» - содержит категориальные данные. Алгоритм машинного обучения, который я пытаюсь использовать, принимает только числовые данные. Я хочу преобразовать столбец "Ключевое слово" в числовые значения. Как это сделать? Используете НЛП? Мешок слов?

Я попробовал следующее, но получил 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 Ответ

1 голос
/ 07 октября 2019

Вы, вероятно, хотите использовать кодировщик. Одними из самых популярных и популярных являются LabelEncoder и OneHotEncoder. Оба предоставляются как части библиотеки 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 может использоваться для преобразования категориальных данных в один массив с горячим кодированием. Кодирование, ранее определенное y с использованием OneHotEncoder, приведет к:

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 можно найти здесь .

...