- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含如下训练数据集的文件:
sentence F1 F2 F3 F4 F5 class
this is a dog 0 1 0 0 0 1
i like cats 1 0 0 0 0 1
go to the fridge 0 0 1 0 0 0
i drive a car 0 0 0 1 0 0
i dislike rabbits 0 0 0 0 1 1
我有一组句子。我想预测(在这个例子中,现实生活中的句子更长)每个句子中是否包含动物(类别)。我已经为每个句子分配了特征 F1 = 句子中提到的猫,F2 = 句子中提到的狗,F3 = 句子中提到的冰箱,F4 = 句子中提到的汽车,F5 = 句子中提到的兔子,类是句子中是否有动物)。
然后我有另一个文件,其中包含句子列表(测试数据集):
dolphins live in the sea
bears live in the woods
there is no milk left
where are the zebras
我想使用训练数据集(上面的特征矩阵)训练朴素贝叶斯分类器,然后使用在句子测试文件上创建的模型。我可以这样做吗?
我尝试过这个:
import numpy as np
import sklearn.naive_bayes import BernoulliNB
sentence = []
feature1 = []
feature2 = []
feature3 = []
feature4 = []
feature5 = []
class_name = []
test_dataset = [line.strip() for line in open(sys.argv[2])]
for line in open(sys.argv[1]):
line = line.strip().split('\t')
sentence.append(line[0])
feature1.append(line[1])
feature2.append(line[2])
feature3.append(line[3])
feature4.append(line[4])
feature5.append(line[5])
class_name.append(line[6])
list_of_features = [feature1,feature2,feature3,feature4,feature5]
#I'm not sure if this is right: question 1 below
clf = BernoulliNB()
clf.fit(list_of_features,class_name)
# I'm not sure what goes in the next line: question 2 below
print clf.predict(??)
我有一些问题。
当我运行代码直到 clf.fit 语句时,出现错误:
文件“naive_bayes.py”,第 28 行,位于clf.fit(特征列表,类名)文件“/usr/local/lib/python2.7/dist-packages/sklearn/naive_bayes.py”,第 527 行,适合X, y = check_X_y(X, y, 'csr')文件“/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py”,第 520 行,在 check_X_y 中检查一致长度(X,y)文件“/usr/local/lib/python2.7/dist-packages/sklearn/utils/validation.py”,第 176 行,在 check_consistent_length 中"%s"% str(唯一))ValueError:发现样本数量不一致的数组:[ 5 10]
但是当我计算列表的长度时,它们似乎都是相同的长度?谁能阐明我在这里做错了什么?
我的第二个问题是将“print clf.predict()”行读取为“print clf.predict(test_dataset)”(即,没有附加功能或类的句子列表,即我想分配到类 0 或 1;我现在无法测试这一点,因为我似乎无法克服问题 1 中的错误)。
顺便说一句,一旦我最终能够让它发挥作用,以某种方式计算出预测器的准确性将会很棒。然而,我正在努力让基础知识首先发挥作用。
编辑 1:修改后的脚本
import numpy as np
from sklearn.naive_bayes import BernoulliNB
import sys
sentence = []
feature1 = []
feature2 = []
feature3 = []
feature4 = []
feature5 = []
class_name = []
for line in open(sys.argv[1]):
line = line.strip().split('\t')
sentence.append(line[0])
feature1.append(int(line[1]))
feature2.append(int(line[2]))
feature3.append(int(line[3]))
feature4.append(int(line[4]))
feature5.append(int(line[5]))
class_name.append(int(line[6]))
print feature1
print feature2
print feature3
print feature4
print feature5
print class_name
list_of_features = [feature1,feature2,feature3,feature4,feature5]
transpos_list_of_features = np.array(list_of_features).T
clf = BernoulliNB()
print clf.fit(transpos_list_of_features,class_name)
#print clf.predict(??)
输出:
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[1, 0, 1, 1, 1, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1]
[0, 0, 0, 0, 0, 0, 0, 1, 1, 1]
BernoulliNB(alpha=1.0, binarize=0.0, class_prior=None, fit_prior=True)
最佳答案
1-这里有几个问题。
sentence.append(line[0])
我猜,您得到的是字符串“0”或“1”而不是整数值。我不认为这个 scikit 模块可以使用字符串值。您应该将它们转换为整数。它可能类似于 sentence.append(int(line[0]))
list_of_features
变量是 no_of_features x no_of_features 矩阵。它的形状应该是 n_samples x n_features。您可以通过 list_of_features = np.array(list_of_features).T
2 - 分类器不知道如何将句子映射到特征,因此您必须明确地给出特征。您可以通过遍历句子并检查目标词是否存在来实现这一点。
编辑:
import numpy as np
from sklearn.naive_bayes import BernoulliNB
feature_word_list = ["cat", "dog", "fridge", "car", "rabbit"]
feature1 = [0, 1, 0, 0, 0]
feature2 = [1, 0, 0, 0, 0]
feature3 = [0, 0, 1, 0, 0]
feature4 = [0, 0, 0, 1, 0]
feature5 = [1, 1, 0, 0, 1]
class_name_list = [1, 1, 0, 0, 1]
train_features = np.array([feature1,feature2,feature3,feature4,feature5]).T
clf = BernoulliNB()
clf.fit(train_features, class_name_list)
上面的代码是相同的,只是我直接输入特征值而不从文件中读取。
test_data = ["this is about dog and cats","not animal related sentence"]
test_feature_list = []
for test_instance in test_data:
test_feature = [1 if feature_word in test_instance else 0 for feature_word in feature_word_list]
test_feature_list.append(test_feature)
test_feature_matrix = np.array(test_feature_list)
print(test_feature_matrix)
现在你的 test_feature_matrix 看起来像这样:
[[1 1 0 0 0]
[0 0 0 0 0]]
请注意,我有 2 个测试数据,因此矩阵有 2 个对应的行,每列代表一个特征值(即句子中是否存在特定单词)。这就是我在第 2 点中想说的,分类器不知道“猫”、“冰箱”或其他东西,但它需要的是单词是否存在,1 或 0。
现在您可以预测这些测试数据(句子)的标签:
predicted_label_list = clf.predict(test_feature_matrix)
print(predicted_label_list)
给出了结果
[1 0]
注意:它可能不适用于您的测试数据,因为它包含不在您的特征空间和训练数据中的单词。我的意思是你的测试数据包含“斑马”,但训练集中没有“斑马”,因此它可能被分类为 0。
关于python - 使用 Sklearn.naive_bayes.Bernoulli 的朴素贝叶斯分类器;如何利用模型进行预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48871652/
我之前让 dll 注入(inject)器变得简单,但我有 Windows 7,我用 C# 和 C++ 做了它,它工作得很好!但是现在当我在 Windows 8 中尝试相同的代码时,它似乎没有以正确的方
我正在尝试制作一个名为 core-splitter 的元素,该元素在 1.0 中已弃用,因为它在我们的项目中起着关键作用。 如果您不知道 core-splitter 的作用,我可以提供一个简短的描述。
我有几个不同的蜘蛛,想一次运行所有它们。基于 this和 this ,我可以在同一个进程中运行多个蜘蛛。但是,我不知道如何设计一个信号系统来在所有蜘蛛都完成后停止 react 器。 我试过了: cra
有没有办法在达到特定条件时停止扭曲 react 器。例如,如果一个变量被设置为某个值,那么 react 器应该停止吗? 最佳答案 理想情况下,您不会将变量设置为一个值并停止 react 器,而是调用
https://code.angularjs.org/1.0.0rc9/angular-1.0.0rc9.js 上面的链接定义了外部js文件,我不知道Angular-1.0.0rc9.js的注入(in
我正在尝试运行一个函数并将服务注入(inject)其中。我认为这可以使用 $injector 轻松完成.所以我尝试了以下(简化示例): angular.injector().invoke( [ "$q
在 google Guice 中,我可以使用函数 createInjector 创建基于多个模块的注入(inject)器。 因为我使用 GWT.create 在 GoogleGin 中实例化注入(in
我在 ASP.NET Core 1.1 解决方案中使用配置绑定(bind)。基本上,我在“ConfigureServices Startup”部分中有一些用于绑定(bind)的简单代码,如下所示: s
我在 Spring MVC 中设置 initBinder 时遇到一些问题。我有一个 ModelAttribute,它有一个有时会显示的字段。 public class Model { privat
我正在尝试通过jquery post发布knockoutjs View 模型 var $form = $('#barcodeTemplate form'); var data = ko.toJS(vm
如何为包含多态对象集合的复杂模型编写自定义模型绑定(bind)程序? 我有下一个模型结构: public class CustomAttributeValueViewModel { publi
您好,我正在尝试实现我在 this article 中找到的扩展方法对于简单的注入(inject)器,因为它不支持开箱即用的特定构造函数的注册。 根据这篇文章,我需要用一个假的委托(delegate)
你好,我想自动注册我的依赖项。 我现在拥有的是: public interface IRepository where T : class public interface IFolderReposi
我正在使用 Jasmine 测试一些 Angular.js 代码。为此,我需要一个 Angular 注入(inject)器: var injector = angular.injector(['ng'
我正在使用 Matlab 代码生成器。不可能包含代码风格指南。这就是为什么我正在寻找一个工具来“ reshape ”、重命名和重新格式化生成的代码,根据我的: 功能横幅约定 文件横幅约定 命名约定 等
这个问题在这里已经有了答案: Where and why do I have to put the "template" and "typename" keywords? (8 个答案) 关闭 8
我开发了一种工具,可以更改某些程序的外观。为此,我需要在某些进程中注入(inject)一个 dll。 现在我基本上使用这个 approach .问题通常是人们无法注入(inject) dll,因为他们
我想使用 swing、spring 和 hibernate 编写一个 java 应用程序。 我想使用数据绑定(bind)器用 bean 的值填充 gui,并且我还希望它反射(reflect) gui
我有这段代码,当两个蜘蛛完成后,程序仍在运行。 #!C:\Python27\python.exe from twisted.internet import reactor from scrapy.cr
要点是 Spring Batch (v2) 测试框架具有带有 @Autowired 注释的 JobLauncherTestUtils.setJob。我们的测试套件有多个 Job 类提供者。因为这个类不
我是一名优秀的程序员,十分优秀!