如何解决这个分类报告警告? [重复]

我创建了一个多类分类模型。一切顺利,验证准确率达到了84%,但当我打印分类报告时,我得到了这个警告:

 UndefinedMetricWarning: 在没有预测样本的标签中,精确度和F分数未定义并被设置为0.0。使用`zero_division`参数来控制这种行为。  _warn_prf(average, modifier, msg_start, len(result))

分类报告:

              精确度    召回率  F1分数   支持量           0       0.84      1.00      0.91     51890           1       0.67      0.04      0.08      8706           2       0.00      0.00      0.00      1605    准确率                           0.84     62201   宏平均       0.50      0.35      0.33     62201加权平均       0.79      0.84      0.77     62201

源代码 –

import pandas as pddf=pd.read_csv('Crop_Agriculture_Data_2.csv')df=df.drop('ID',axis=1)dummies=pd.get_dummies(df[['Crop_Type', 'Soil_Type', 'Pesticide_Use_Category', 'Season']],drop_first=True)df=df.drop(['Crop_Type', 'Soil_Type', 'Pesticide_Use_Category', 'Season'],axis=1)df=pd.concat([df,dummies],axis=1)df['Crop_Damage']=df['Crop_Damage'].map({'Minimal Damage':0,'Partial Damage':1,'Significant Damage':2})x=df.drop('Crop_Damage',axis=1).valuesy=df.Crop_Damage.valuesfrom sklearn.model_selection import train_test_splitx_train,x_test,y_train,y_test=train_test_split(x,y,train_size=0.3,random_state=101)from sklearn.preprocessing import MinMaxScalermms=MinMaxScaler()x_train=mms.fit_transform(x_train)x_test=mms.transform(x_test)from tensorflow.keras.models import Sequentialfrom tensorflow.keras.layers import Dense,Dropout,Flattenmodel=Sequential()model.add(Flatten())model.add(Dense(10,activation='relu'))model.add(Dropout(0.3))model.add(Dense(6,activation='relu'))model.add(Dropout(0.3))model.add(Dense(3,activation='softmax'))model.compile(loss='sparse_categorical_crossentropy',optimizer='adam',metrics=['accuracy'])model.fit(x_train,y_train,validation_data=(x_test,y_test),epochs=13)import numpy as nppred=np.argmax(model.predict(x_test),axis=-1)from sklearn.metrics import classification_reportprint(classification_report(y_test,pred))

我认为这可能是因为大部分数据都属于一个类别,但我并不确定。有什么我可以做来解决这个问题吗?


回答:

你不应该忽略这个警告,因为它表示你的第2类在预测中没有出现,因为训练集中没有这类样本。

你面临的是一个不平衡的分类问题,第2类的样本数量非常少,并且只出现在测试数据中。

我建议你做两件事

StratifiedKFold 这样在你分割训练和测试数据时,会考虑到所有类别

过采样 你可能需要通过随机重采样训练数据集来复制少数类别的样本,以调整你的数据

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注