Я работаю над лингвистическими данными для обучения классификатора (дерева решений).Данные представлены в формате csv, разделены табуляцией и содержат 62000 строк и 11 столбцов.
Образец данных:
target_lemma target_pos left_word left_word_pos right_word right_word_pos parrent_word parrent_word_pos arg_word arg_word_pos label```
form VBZ %% %% forms VBZ forms VBZ forms VBZ N```
form VBZ provINce NN %% %% forms VBZ forms VBZ N```
form VBZ The DT %% %% forms VBZ provINce NN N```
- В этих данных значение Null заменяется на %%.
- Первые 10 значений являются признаками
- Последнее значение - это метка, которая является либо N, либо Y.
Дерево решений выдает ошибку, так как ожидает, что функции будут intили значения с плавающей запятой.Чтобы решить эту проблему, я закодировал данные с помощью горячего энкодера, и он отлично работает с данными, разделенными на 80,20.
Настоящая проблема возникает, когда я даю пользователю ввод без метки.Я преобразую входные данные в закодированные данные в горячем виде и передаю их предиктору.Это дает мне ошибку значения, говоря, что число функций не равно n_features - 11823, а input_features - 10.
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score
from sklearn.feature_extraction import FeatureHasher
h = FeatureHasher(input_type='string')
balance_data = pd.read_csv('identifier-tab.csv',
delimiter='\t',
encoding="ISO-8859-1")
# Splitting Dataset
Y = balance_data.label
X = balance_data.drop(columns='label')
X = pd.get_dummies(X)
Y = pd.get_dummies(Y)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)
print(X_test)
# Gini
clf_gini = DecisionTreeClassifier(criterion="gini", random_state=100, max_depth=9, min_samples_leaf=9)
clf_gini.fit(X_train, y_train)
y_pred = clf_gini.predict(X_test)
print("Gini Predicted values:")
print(y_pred)
print("Gini Accuracy: ", accuracy_score(y_test, y_pred) * 100)
# Entropy
clf_entropy = DecisionTreeClassifier(criterion="entropy", random_state=100, max_depth=3, min_samples_leaf=5)
clf_entropy.fit(X_train, y_train)
y_pred = clf_entropy.predict(X_test)
print("Entropy Predicted values:")
print(y_pred)
print("Entropy Accuracy: ", accuracy_score(y_test, y_pred) * 100)
# User Test (DOES NOT WORK)
xx = "present JJ peculiar JJ %% %% written VBN character NN"
x = xx.split("\t")
data = pd.Series(x)
print(x)
print(data)
data = pd.get_dummies(data)
print(data)
user = clf_gini.predict(data)
Любые предложения или помощь по коду были бы хороши!