首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何纠正sample_weight中的sklearn.naive_bayes?

如何纠正sample_weight中的sklearn.naive_bayes?
EN

Stack Overflow用户
提问于 2019-05-23 03:50:20
回答 2查看 2.2K关注 0票数 1

我正在用不平衡的数据通过Naive Bayes实现sklearn。我的数据有超过16k的记录和6个输出类别。

我试着用由sample_weight计算的sklearn.utils.class_weight来拟合这个模型

sample_weight收到的消息如下:

sample_weight = 11.77540107 1.82284768 0.64688602 2.47138047 0.38577435 1.21389195

代码语言:javascript
复制
import numpy as np

data_set = np.loadtxt("./data/_vector21.csv", delimiter=",")

inp_vec = data_set[:, 1:22]
out_vec = data_set[:, 22:]
#
# # Split dataset into training set and test set
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(inp_vec, out_vec, test_size=0.2)    # 80% training and 20% test
#
# class weight
from keras.utils.np_utils import to_categorical
output_vec_categorical = to_categorical(y_train)
from sklearn.utils import class_weight
y_ints = [y.argmax() for y in output_vec_categorical]
c_w = class_weight.compute_class_weight('balanced', np.unique(y_ints), y_ints)
cw = {}
for i in set(y_ints):
    cw[i] = c_w[i]

# Create a Gaussian Classifier
from sklearn.naive_bayes import *
model = GaussianNB()

# Train the model using the training sets
print(c_w)

model.fit(X_train, y_train, c_w)

# Predict the response for test dataset
y_pred = model.predict(X_test)

# Import scikit-learn metrics module for accuracy calculation
from sklearn import metrics

# Model Accuracy, how often is the classifier correct?
print("\nClassification Report: \n", (metrics.classification_report(y_test, y_pred)))
print("\nAccuracy: %.3f%%" % (metrics.accuracy_score(y_test, y_pred)*100))

我收到一条消息:ValueError: Found input variables with inconsistent numbers of samples: [13212, 6]

有人能告诉我我做错了什么吗?怎么解决呢?

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-23 06:34:56

sample_weightclass_weight是两种不同的东西。

顾名思义:

  • sample_weight将应用于单个样本(数据中的行)。因此,sample_weight的长度必须与X中的样本数相匹配。
  • class_weight是使分类器对类给予更多的重视和重视。因此,class_weight的长度必须与目标中的类数相匹配。

您正在通过使用class_weight计算sample_weight,而不是通过sklearn.utils.class_weight计算,但随后尝试将其传递给sample_weight。因此,尺寸不匹配误差。

请参阅以下问题,以更好地了解这两个权重如何在内部相互作用:

票数 5
EN

Stack Overflow用户

发布于 2021-06-10 02:32:23

这样我就能计算出权重来处理班级的不平衡。

代码语言:javascript
复制
from sklearn.utils import class_weight

sample = class_weight.compute_sample_weight('balanced', y_train)

#Classifier Naive Bayes
naive = naive_bayes.MultinomialNB()
naive.fit(X_train,y_train, sample_weight=sample)
predictions_NB = naive.predict(X_test)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56267835

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档