Требуется ли кодировать входные данные в scikit-learn, где кодируются обученные данные? - PullRequest
0 голосов
/ 07 февраля 2020

Я новичок в python. Я обучил свой алгоритм сильный текст на категориальных данных, и во время обучения я столкнулся с некоторыми ошибками для решения. Я видел, что это требует использования LabelEncoder, и я использовал это. Следовательно, проблема была решена, и обучение алгоритму было завершено.

Я хотел бы знать, почему он не принимает строку , которая была исходными данными (до кодирования). Есть ли способ дать строковые символы алгоритму прогнозирования? Вот мой код:


import pandas as pd
import sklearn
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.neighbors import NearestNeighbors

df=pd.read_csv(r'E:\Study\FYP Data\FYP\datasets\alluni.csv', encoding= 'unicode_escape')
df.head()


Obtained Marks   Intermediate   Bachelor    Institute   %age
0   1001.0  FSc. Pre Medical    DPT          UOS      91.000000
1   1001.0  FSc. Pre Medical    DPT          UOS      91.000000
2   1010.0  FSc. Pre Medical    DPT          UOS      91.818182
3   1000.0  FSc. Pre Medical    DPT          UOS      90.909091
4   1000.0  FSc. Pre Medical    DPT          UOS      90.909091

le = LabelEncoder()
df['Intermediate'] = le.fit_transform(df.Intermediate.values)
df['Intermediate'] = le.fit_transform(df['Intermediate'])

le = LabelEncoder()
df['Institute'] = le.fit_transform(df.Institute.values)
df['Institute'] = le.fit_transform(df['Institute'])
df.head()

Obtained  Marks Intermediate    Bachelor    Institute
0   1001.0          16             DPT        7
1   1001.0          16             DPT        7
2   1010.0          16             DPT        7
3   1000.0          16             DPT        7
4   1000.0          16             DPT        7

df.drop(['%age'],axis=1,inplace=True)
X=df.drop('Bachelor',axis=1)
y=df['Bachelor']
X_train,X_text,y_train,y_test=train_test_split(X,y,test_size=0.2)

model2=DecisionTreeClassifier()
model2.fit(X_train,y_train)

model2.predict([['980','1','UOS']])

Когда я использовал этот код, он показал мне ошибку: ValueError: could not convert string to float: 'UOS'. Есть ли механизм для ввода string в качестве ввода?

1 Ответ

0 голосов
/ 07 февраля 2020

Проблема в том, что вы используете LabelEncoder для кодирования ваших тренировочных данных, но вы все равно отправляете исходные данные при запуске model2.predict()

Попробуйте выполнить кодирование данных с помощью LabelEncoder, прежде чем запускать предикат

data_encoded = le.transform([['980','1','UOS']])
model2.predict(data_encoded)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...