Почему мультиклассовая модель машинного обучения дает плохие результаты? - PullRequest
0 голосов
/ 22 июня 2019

Пока у меня есть следующий код:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from sklearn import preprocessing
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score


df_train = pd.read_csv('uc_data_train.csv')
del df_train['Unnamed: 0']
temp = df_train['size_womenswear']
del df_train['size_womenswear']
df_train['size_womenswear'] = temp
df_train['count'] = 1
print(df_train.head())
print(df_train.dtypes)

Here is the output from the code above

print(df_train[['size_womenswear', 'count']].groupby('size_womenswear').count()) # Determine number of unique catagories, and number of cases for each catagory
del df_train['count']

df_test = pd.read_csv('uc_data_test.csv')
del df_test['Unnamed: 0']
print(df_test.head())

Here is the output of the code above

print(df_test.dtypes)

df_train.drop(['customer_id','socioeconomic_status','brand','socioeconomic_desc','order_method',
           'first_order_channel','days_since_first_order','total_number_of_orders', 'return_rate'], axis=1, inplace=True)
LE = preprocessing.LabelEncoder() # Create label encoder
df_train['size_womenswear'] = LE.fit_transform(np.ravel(df_train[['size_womenswear']]))
print(df_train.head())
print(df_train.dtypes)

Here is the output for the code above

x = df_train.iloc[:,np.arange(len(df_train.columns)-1)].values # Assign independent values
y = df_train.iloc[:,-1].values                                 # and dependent values
xTrain, xTest, yTrain, yTest = train_test_split(x, y, test_size = 0.25, random_state = 0) # Testing on 75% of the data
model = GaussianNB()
model.fit(xTrain, yTrain)
yPredicted = model.predict(xTest)

#print(yPrediction)
print('Accuracy: ', accuracy_score(yTest, yPredicted))

enter image description here

Я не уверен, как включить данные, которые я использую, но я пытаюсь предсказать 'size_womenswear'. Существует 8 различных размеров, которые я кодировал для прогнозирования, и я переместил этот столбец в конец информационного кадра. поэтому y является зависимым и x является независимым (все остальные столбцы)

Я использую гауссовский наивный байесовский классификатор, чтобы попытаться классифицировать 8 различных размеров, а затем протестировать 25% данных. Результаты не очень хорошие.

Я не знаю, почему я получаю точность только 61%, когда я работаю с 80000 строк. Я очень плохо знаком с машинным обучением и был бы признателен за любую помощь. Есть ли лучший метод, который я мог бы использовать в этом случае, чем Gaussian Naive Bayes?

1 Ответ

0 голосов
/ 22 июня 2019

не могу комментировать, просто выбрасываю некоторые идеи;

Может быть, вам нужно справиться с дисбалансом классов и попробовать другую модель, которая будет лучше соответствовать данным? попробуйте пакет xgboost или lightgbm с хорошими данными, которые они обычно показывают довольно хорошо, но это действительно зависит от данных.

Кроме того, как вы разделяете поезд и тест, имеет ли итоговый набор данных обучения и тестов такое же распределение для вашего Y? это очень важно.

И последнее, для классификационных моделей измерение производительности может быть немного сложным, попробуйте другие методы измерения. F1 набирает очки или попробуйте нарисовать путаницу и посмотреть, как выглядят ваши прогнозы против Y. возможно, ваша модель предсказывает все одному или просто несколько классов.

...