朴素贝叶斯算法
㈠ 朴素贝叶斯(naive bayes)
这个硬生生写出来基本很难,而且写出来也不敢保证没有bug。你还不如上网上搜搜看,或者参考****书目-__-
㈡ 为什么朴素贝叶斯称为“朴素”请简述朴素贝叶斯分类的主要思想
朴素贝叶斯分类器是一种应用基于独立假设的贝叶斯定理的简单概率分类器,之所以成为朴素,应该是Naive的直译,意思为简单,朴素,天真。
1、贝叶斯方法
贝叶斯方法是以贝叶斯原理为基础,使用概率统计的知识对样本数据集进行分类。由于其有着坚实的数学基础,贝叶斯分类算法的误判率是很低的。
贝叶斯方法的特点是结合先验概率和后验概率,即避免了只使用先验概率的主观偏见,也避免了单独使用样本信息的过拟合现象。贝叶斯分类算法在数据集较大的情况下表现出较高的准确率,同时算法本身也比较简单。
2、朴素贝叶斯算法
朴素贝叶斯算法(Naive Bayesian algorithm) 是应用最为广泛的分类算法之一。
朴素贝叶斯方法是在贝叶斯算法的基础上进行了相应的简化,即假定给定目标值时属性之间相互条件独立。也就是说没有哪个属性变量对于决策结果来说占有着较大的比重,也没有哪个属性变量对于决策结果占有着较小的比重。
虽然这个简化方式在一定程度上降低了贝叶斯分类算法的分类效果,但是在实际的应用场景中,极大地简化了贝叶斯方法的复杂性。
(2)朴素贝叶斯算法扩展阅读
研究意义
人们根据不确定性信息作出推理和决策需要对各种结论的概率作出估计,这类推理称为概率推理。概率推理既是概率学和逻辑学的研究对象,也是心理学的研究对象,但研究的角度是不同的。概率学和逻辑学研究的是客观概率推算的公式或规则。
而心理学研究人们主观概率估计的认知加工过程规律。贝叶斯推理的问题是条件概率推理问题,这一领域的探讨对揭示人们对概率信息的认知加工过程与规律、指导人们进行有效的学习和判断决策都具有十分重要的理论意义和实践意义。
㈢ 为什么朴素贝叶斯分类称为朴素的
因为它假设样本特征彼此独立,没有相关关系。现实问题中这个假设往往不成立,所以这个假设我们认为是朴素的。
㈣ 求朴素贝叶斯算法源码
ICTCLAS中文分词for Lucene.Net接口代码(实现Analyzer):
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6using Lucene.Net.Analysis;
7using Lucene.Net.Analysis.Standard;
8
9namespace AspxOn.Search.FenLei
10{
11
12 /**//// <summary>
13 /// ICTCLAS分词组件for Lucene.net接口
14 /// </summary>
15 public class ICTCLASAnalyzer : Analyzer
16 {
17 //定义要过滤的词
18 public static readonly System.String[] CHINESE_ENGLISH_STOP_WORDS = new string[428];
19 public string NoisePath = Environment.CurrentDirectory + "\\data\\stopwords.txt";
20
21 public ICTCLASAnalyzer()
22 {
23 StreamReader reader = new StreamReader(NoisePath, System.Text.Encoding.Default);
24 string noise = reader.ReadLine();
25 int i = 0;
26
27 while (!string.IsNullOrEmpty(noise))
28 {
29 CHINESE_ENGLISH_STOP_WORDS[i] = noise;
30 noise = reader.ReadLine();
31 i++;
32 }
33
34 }
35
36 /**//**//**//// Constructs a {@link StandardTokenizer} filtered by a {@link
37 /// StandardFilter}, a {@link LowerCaseFilter} and a {@link StopFilter}.
38 ///
39 public override TokenStream TokenStream(System.String fieldName, System.IO.TextReader reader)
40 {
41 TokenStream result = new ICTCLASTokenizer(reader);
42 result = new StandardFilter(result);
43 result = new LowerCaseFilter(result);
44 result = new StopFilter(result, CHINESE_ENGLISH_STOP_WORDS);
45 return result;
46 }
47
48
49 }
50}
ICTCLAS中文分词for Lucene.Net接口代码(实现Tokenizer):
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5using Lucene.Net.Analysis;
6using SharpICTCLAS;
7using System.IO;
8
9namespace AspxOn.Search.FenLei
10{
11 public class ICTCLASTokenizer : Tokenizer
12 {
13 int nKind = 1;
14 List<WordResult[]> result;
15 int startIndex = 0;
16 int endIndex = 0;
17 int i = 1;
18 /**//**/
19 /**////
20 /// 待分词的句子
21 ///
22 private string sentence;
23 /**//**/
24 /**//// Constructs a tokenizer for this Reader.
25 public ICTCLASTokenizer(System.IO.TextReader reader)
26 {
27 this.input = reader;
28 sentence = input.ReadToEnd();
29 sentence = sentence.Replace("\r\n", "");
30 string DictPath = Path.Combine(Environment.CurrentDirectory, "Data") + Path.DirectorySeparatorChar;
31 //Console.WriteLine("正在初始化字典库,请稍候");
32 WordSegment wordSegment = new WordSegment();
33 wordSegment.InitWordSegment(DictPath);
34 result = wordSegment.Segment(sentence, nKind);
35 }
36
37 /**//**/
38 /**//// 进行切词,返回数据流中下一个token或者数据流为空时返回null
39 ///
40 public override Token Next()
41 {
42 Token token = null;
43 while (i < result[0].Length - 1)
44 {
45 string word = result[0][i].sWord;
46 endIndex = startIndex + word.Length - 1;
47 token = new Token(word, startIndex, endIndex);
48 startIndex = endIndex + 1;
49
50 i++;
51 return token;
52
53 }
54 return null;
55 }
56
57 }
58}
中文分词器代码:
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.IO;
5
6using Lucene.Net.Analysis;
7using Lucene.Net.Analysis.Standard;
8using Lucene.Net.Documents;
9
10using Lucene.Net.Analysis.Cn;
11using Lucene.Net.Analysis.KTDictSeg;
12
13namespace AspxOn.Search.FenLei
14{
15 /**//// <summary>
16 /// 中文分词器
17 /// </summary>
18 public class ChineseSpliter
19 {
20 public static string Split(string text, string splitToken)
21 {
22 StringBuilder sb = new StringBuilder();
23
24 Analyzer an = new ICTCLASAnalyzer();
25
26 //TokenStream ts = an.ReusableTokenStream("", new StringReader(text));
27
28 TokenStream ts = an.TokenStream("", new StringReader(text));
29
30 Lucene.Net.Analysis.Token token;
31 while ((token = ts.Next()) != null)
32 {
33 sb.Append(splitToken + token.TermText());
34 }
35
36 return sb.ToString().Substring(1);
37 }
38 }
39}
先验概率计算代码:
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace AspxOn.Search.FenLei
6{
7 /**//// <summary>
8 /// 先验概率(事先概率)计算
9 /// </summary>
10 public class PriorProbability
11 {
12 private static TrainingDataManager tdm = new TrainingDataManager();
13
14 /**//// <summary>
15 /// 计算先验概率
16 /// </summary>
17 /// <param name="c">给定的分类</param>
18 /// <returns>给定条件下的先验概率</returns>
19 public static float CaculatePc(string c)
20 {
21 float ret = 0F;
22 float Nc = tdm.(c);
23 float N = tdm.GetTrainFileCount();
24 ret = Nc / N;
25 return ret;
26 }
27 }
28}
1using System;
2using System.Collections.Generic;
3using System.Text;
4
5namespace AspxOn.Search.FenLei
6{
7 /**//// <summary>
8 /// 条件概率计算
9 /// </summary>
10 public class ClassConditionalProbability
11 {
12
13 private static TrainingDataManager tdm = new TrainingDataManager();
14 private static float M = 0F;
15
16 /**//// <summary>
17 /// 类条件概率
18 /// </summary>
19 /// <param name="x">给定关键字</param>
20 /// <param name="c">给定分类</param>
21 /// <returns></returns>
22 public static float CaculatePxc(string x, string c)
23 {
24 float ret = 0F;
25 float Nxc = tdm.(c, x);
26 float Nc = tdm.(c);
27 float V = tdm.GetTrainingClassifications().Length;
28
29 ret = (Nxc + 1) / (Nc + V + M);//为避免出现0这样的极端情况,进行加权处理
30
31 return ret;
32 }
33 }
34}
㈤ 朴素贝叶斯算法问题
用这个来编软件 ? 我给你的提示,也是我现在在做的毕业设计,你用excel来实现你的计算,这个要比软件来的方便,然后你在利用VB和你制作的excel进行交互。 生活中的具体应用不多
㈥ 朴素贝叶斯算法不是可以直接分类,为什么还要机器学习
朴素贝叶斯本来就是机器学习里的一种分类器,而且只是生成模型中的一类。
是生成模型的话,你得假设分布。”朴素“的话还得有独立性假设。结果如何和这些假设是否准确都有关系。总体来说生成模型假阳性率和效率也都一般般。
再者,给定图像的像素值,你觉得直接用这个特征来建表训练朴素贝叶斯的可行性如何?我觉得几乎没有可行性。相比起自己设计图像类数据的特征提取,深度卷积完全不需要管这一步所以至少图像方面深度学习目前的优势是毋庸置疑的。
朴素贝叶斯目前也就在自然语言之类的方面有不错的应用吧。
㈦ 朴素贝叶斯算法 K Nearest Neighbor算法 K-Means 算法 具体应用环境有什么区别
Naive Bayes和K-NN是分类算法,有监督训练样本,都比较快
样本少,特征之间接近独立分布的时候建议用Naive Bayes,通常就用正态分布最大似然估计特征概率
样本多的时候建议用K-NN,不过距离测度没有通用的最好选择
K-Means是无监督的聚类算法,没样本的时候就用这个,速度相当慢,还是离线的
㈧ 贝叶斯分类算法和朴素贝叶斯算法的区别
为了测试评估贝叶斯分类器的性能,用不同数据集进行对比实验是必不可少的. 现有的贝叶斯网络实验软件包都是针对特定目的设计的,不能满足不同研究的需要. 介绍了用Matlab在BNT软件包基础上建构的贝叶斯分类器实验平台MBNC,阐述了MBNC的系统结构和主要功能,以及在MBNC上建立的朴素贝叶斯分类器NBC,基于互信息和条件互信息测度的树扩展的贝叶斯分类器TANC,基于K2算法和GS算法的贝叶斯网络分类器BNC. 用来自UCI的标准数据集对MBNC进行测试,实验结果表明基于MBNC所建构的贝叶斯分类器的性能优于国外同类工作的结果,编程量大大小于使用同类的实验软件包,所建立的MBNC实验平台工作正确、有效、稳定. 在MBNC上已经进行贝叶斯分类器的优化和改进实验,以及处理缺失数据等研究工作.
㈨ 朴素贝叶斯的推理学习算法
朴素贝叶斯的推理学习算法
贝叶斯公式简易推导式:
朴素贝叶斯的朴素在于假设B特征的每个值相互独立,所以朴素贝叶斯的公式是这样的
学习与分类算法:
(1)计算先验概率和条件概率
拉普拉斯平滑:
(2)代入被测样本向量,得到不同类别P,再根据后验概率最大化,取P最大的类别作为该标签类别。
朴素贝叶斯优点在于对于小规模数据很好,适合多分类。缺点是数据输入形式敏感而且特征值之间的相互独立很难保证带来的影响。
㈩ 如何用通俗的例子说明朴素贝叶斯算法
网络几乎把人类知识刷满