樸素貝葉斯演算法
㈠ 樸素貝葉斯(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最大的類別作為該標簽類別。
樸素貝葉斯優點在於對於小規模數據很好,適合多分類。缺點是數據輸入形式敏感而且特徵值之間的相互獨立很難保證帶來的影響。
㈩ 如何用通俗的例子說明樸素貝葉斯演算法
網路幾乎把人類知識刷滿