【问题标题】:Why is Multi Class Machine Learning Model Giving Bad Results?为什么多类机器学习模型会给出糟糕的结果?
【发布时间】:2019-11-04 17:34:56
【问题描述】:

到目前为止,我有以下代码:

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)

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())

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)

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))

我不确定如何包含我正在使用的数据,但我正在尝试预测 'size_womenswear'。我已经编码了 8 种不同的大小来预测,并且我已将此列移动到数据帧的末尾。所以y 是独立的,x 是独立的(所有其他列)

我正在使用高斯朴素贝叶斯分类器尝试对 8 种不同的尺寸进行分类,然后对 25% 的数据进行测试。结果不是很好。

我不知道为什么在处理 80,000 行时我的准确率只有 61%。我对机器学习非常陌生,希望能提供任何帮助。在这种情况下,有没有比高斯朴素贝叶斯更好的方法?

【问题讨论】:

    标签: python scikit-learn classification sklearn-pandas


    【解决方案1】:

    无法评论,只是抛出一些想法;

    也许您需要处理类不平衡,并尝试其他更适合数据的模型?尝试使用 xgboost 或 lightgbm 包给定良好的数据,它们通常通常表现不错,但这真的取决于数据。

    您拆分训练和测试的方式也是如此,生成的训练和测试数据集是否对您的 Y 具有相似的分布?这很重要。

    最后,对于分类模型,性能测量可能有点棘手,请尝试其他一些测量方法。 F1 得分或尝试绘制混淆矩阵并查看您的预测与 Y 的样子。也许您的模型将所有内容都预测为一个 或者只是几节课。

    【讨论】:

    • 我不知道如何处理班级不平衡,但是是的,班级只有几百人,其余的人有几万人。这些是sklearn中的其他软件包吗?我会就你提到的其他事情回复你
    • xgboost 和 lightgbm 不是 sklearn 的一部分。它们需要单独安装。可能从 xgboost 开始,因为它提供了更好的结果; lightgbm 训练速度要快得多,但模型性能稍弱。
    • 如果可能的话,我更愿意留在 sklearn 或 anaconda 中。这是我最熟悉的,也是我想获得的使用经验
    • 我真的建议你尝试 sklearn 之外的包,它是学习数据科学/机器学习算法/模型/技术的好包,但它们并不是适合所有情况。如果你去 kaggle.com 看看其他人的代码,你很少会发现 sklearn 被用于拟合任何模型,sklearn 包中的其他实用程序很好。这意味着您可以将 sklearn 中的实用工具与任何其他机器学习包结合使用。
    猜你喜欢
    • 2021-05-29
    • 2021-01-16
    • 2020-02-03
    • 2021-06-01
    • 2020-10-14
    • 2020-03-01
    • 2023-03-23
    • 1970-01-01
    • 2022-12-10
    相关资源
    最近更新 更多