2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  算法課程設(shè)計報告</b></p><p><b> ?。ㄋ惴ň幊虒崿F(xiàn)類)</b></p><p><b>  貝葉斯算法編程實現(xiàn)</b></p><p>  院 系 部 門: </p><p>  學(xué) 生 學(xué) 號: ********

2、* </p><p>  學(xué) 生 姓 名: ********* </p><p>  指 導(dǎo) 教 師: ***** </p><p><b>  2013年5月</b></p><p>  第一部分 貝葉斯算法研究背景、特點與發(fā)展3</p><p> 

3、 1.1 貝葉斯算法研究背景3</p><p>  1.2 貝葉斯算法特點3</p><p>  1.3 貝葉斯算法發(fā)展3</p><p>  第二部分 算法分析與程序流程圖設(shè)計3</p><p>  2.1、基于對問題的分析4</p><p>  2.2、基于對問題的java算法分析4</p

4、><p>  2.2、程序流程圖設(shè)計5</p><p>  第三部分 實現(xiàn)設(shè)計語言選擇與算法編程實現(xiàn)5</p><p>  3.1、java算法實現(xiàn)5</p><p>  第四部分 程序測試與結(jié)果分析10</p><p>  4.1程序測試10</p><p>  4.2結(jié)果分析11

5、</p><p>  第五部分 總結(jié)與心得體會11</p><p>  5.1總結(jié)與心得體會11</p><p>  第六部分 參考文獻(xiàn)12</p><p>  6.1參考文獻(xiàn)(2個)12</p><p>  第一部分 貝葉斯算法研究背景、特點與發(fā)展</p><p>  1.1

6、貝葉斯算法研究背景</p><p>  貝葉斯分類算法是統(tǒng)計學(xué)分類方法,它是一類利用概率統(tǒng)計知識進(jìn)行分類的算法。在許多場合,樸素貝葉斯(Naïve Bayes,NB)分類算法可以與決策樹和神經(jīng)網(wǎng)絡(luò)分類算法相媲美,且方法簡單、分類準(zhǔn)確率高、速度快。由于貝葉斯定理假設(shè)一個屬性值對給定類的影響?yīng)毩⒂谄渌鼘傩缘闹担思僭O(shè)在實際情況中經(jīng)常是不成立的,因此其分類準(zhǔn)確率可能會下降。為此,就出現(xiàn)了許多降低獨立性假設(shè)的

7、貝葉斯分類算法,如TAN(tree augmented Bayes network)算法。</p><p>  1.2 貝葉斯算法特點</p><p>  和決策樹模型相比,樸素貝葉斯模型發(fā)源于古典數(shù)學(xué)理論,有著堅實的數(shù)學(xué)基礎(chǔ),以 及穩(wěn)定的分類效率。同時,NBC模型所需估計的參數(shù)很少,對缺失數(shù)據(jù)不太敏感,算法也比較簡單。理論上,NBC模型與其他分類方法相比具有最小的誤差率。 但是實際上并

8、非總是如此,這是因為NBC模型假設(shè)屬性之間相互獨立,這個假設(shè)在實際應(yīng)用中往往是不成立的,這給NBC模型的正確分類帶來了一定影響。在屬 性個數(shù)比較多或者屬性之間相關(guān)性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關(guān)性較小時,NBC模型的性能最為良好。</p><p>  1.3 貝葉斯算法發(fā)展</p><p>  貝葉斯分類理論有最初的樸素貝葉斯于EM算法,灰色關(guān)系繼續(xù)發(fā)展為基于

9、改進(jìn)EM的樸素貝葉斯分類理論。</p><p>  第二部分 算法分析與程序流程圖設(shè)計</p><p>  2.1、基于對問題的分析</p><p>  對問題進(jìn)行分析,設(shè)X是類標(biāo)號未知的數(shù)據(jù)樣本,設(shè)H為某種假的,如數(shù)據(jù)養(yǎng)本X屬于某特定的類C。對與分類問題,希望確定P(H|X),即給定觀測數(shù)據(jù)樣本X,假定H成立的概率。貝葉斯定理給出了如下計算P(H|X)的簡單有效

10、的方法:</p><p>  P(H|X)=P(X|H)P(H)/P(X)</p><p>  其中P(H)稱為先驗概率,P(X|H)表示假設(shè)H成立時觀查到X的概率。</p><p>  P(H|X)表示后驗概率。</p><p>  每一個樣本數(shù)據(jù)用一個n維特征向量X={x1,x2,x3,…,xn}表示,分別描述具有n個屬性A1,A1,…A

11、n的樣本的n個度量。</p><p>  假定有m個類C1,C2,…,Cm,給定一個未知數(shù)據(jù)樣本X(即沒有類編號),分類器將預(yù)測X屬性與最高后驗概率的類。也就是說,樸素貝葉斯分類將未知樣本分配給Ci(1<=i<=m),當(dāng)且僅當(dāng)P(Ci|X)>P(Cj|X),j=1,2,…m,j不等于i這樣最大的P(Ci|X)對應(yīng)的類Ci稱為最大后驗假定。</p><p>  由于P(X)

12、對于所有類是常數(shù),只需要P(X|Ci)P(Ci)最大即可。注意假設(shè)不是等概率的,那么類的先驗概率可以用P(Ci)=si/s計算,其中si是類Ci的訓(xùn)練樣本數(shù),而s是訓(xùn)練樣本總數(shù)。P(X|Ci)=</p><p>  2.2、基于對問題的java算法分析</p><p>  首先需要將所有的訓(xùn)練數(shù)據(jù)讀入到ArrayList<ArrayList<String>>對象集合

13、中去,其中每一條訓(xùn)練數(shù)據(jù)對應(yīng)一個ArrayList<String>對象集合。</p><p>  同理用readTestData()將測試元組讀如ArrayList<String>對象集合中去。</p><p>  下面就需要將ArrayList<ArrayList<String>>中的每一組訓(xùn)練元組按照類別屬性分開,保存到Map<St

14、ring, ArrayList<ArrayList<String>>>對象中去</p><p>  用三重for循環(huán)來計算測試元組中每一屬性所在每一個類別中概率的之積,并返回最大積所對應(yīng)的類別名稱。</p><p>  2.2、程序流程圖設(shè)計</p><p>  第三部分 實現(xiàn)設(shè)計語言選擇與算法編程實現(xiàn)</p><

15、p>  3.1、java算法實現(xiàn)</p><p>  package org.decimalcalculate;</p><p>  import java.math.BigDecimal;</p><p>  public class DecimalCalculate {</p><p>  private static final

16、int DEF_DIV_SCALE = 10;</p><p>  // 這個類不能實例化</p><p>  private DecimalCalculate() {</p><p><b>  }</b></p><p>  public static double add(double v1, double v2)

17、 {</p><p>  BigDecimal b1 = new BigDecimal(Double.toString(v1));</p><p>  BigDecimal b2 = new BigDecimal(Double.toString(v2));</p><p>  return b1.add(b2).doubleValue();</p>&

18、lt;p><b>  }</b></p><p>  public static double sub(double v1, double v2) {</p><p>  BigDecimal b1 = new BigDecimal(Double.toString(v1));</p><p>  BigDecimal b2 = new B

19、igDecimal(Double.toString(v2));</p><p>  return b1.subtract(b2).doubleValue();</p><p><b>  }</b></p><p>  public static double mul(double v1, double v2) {</p><

20、;p>  BigDecimal b1 = new BigDecimal(Double.toString(v1));</p><p>  BigDecimal b2 = new BigDecimal(Double.toString(v2));</p><p>  return b1.multiply(b2).doubleValue();</p><p><

21、b>  }</b></p><p>  public static double div(double v1, double v2) {</p><p>  return div(v1, v2, DEF_DIV_SCALE);</p><p><b>  }</b></p><p>  public s

22、tatic double div(double v1, double v2, int scale) {</p><p>  if (scale < 0) {</p><p>  throw new IllegalArgumentException(</p><p>  "The scale must be a positive integer or

23、zero");</p><p><b>  }</b></p><p>  BigDecimal b1 = new BigDecimal(Double.toString(v1));</p><p>  BigDecimal b2 = new BigDecimal(Double.toString(v2));</p><

24、;p>  return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();</p><p><b>  }</b></p><p>  public static double round(double v, int scale) {</p><p>  if (sc

25、ale < 0) {</p><p>  throw new IllegalArgumentException(</p><p>  "The scale must be a positive integer or zero");</p><p><b>  }</b></p><p>  Bi

26、gDecimal b = new BigDecimal(Double.toString(v));</p><p>  BigDecimal one = new BigDecimal("1");</p><p>  return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();</p>

27、<p><b>  }</b></p><p>  public static float convertsToFloat(double v) {</p><p>  BigDecimal b = new BigDecimal(v);</p><p>  return b.floatValue();</p><p

28、><b>  }</b></p><p>  public static int convertsToInt(double v) {</p><p>  BigDecimal b = new BigDecimal(v);</p><p>  return b.intValue();</p><p><b>

29、;  }</b></p><p>  public static long convertsToLong(double v) {</p><p>  BigDecimal b = new BigDecimal(v);</p><p>  return b.longValue();</p><p><b>  }</

30、b></p><p>  public static double returnMax(double v1, double v2) {</p><p>  BigDecimal b1 = new BigDecimal(v1);</p><p>  BigDecimal b2 = new BigDecimal(v2);</p><p> 

31、 return b1.max(b2).doubleValue();</p><p><b>  }</b></p><p>  public static double returnMin(double v1, double v2) {</p><p>  BigDecimal b1 = new BigDecimal(v1);</p>

32、;<p>  BigDecimal b2 = new BigDecimal(v2);</p><p>  return b1.min(b2).doubleValue();</p><p><b>  }</b></p><p>  public static int compareTo(double v1, double v2)

33、{</p><p>  BigDecimal b1 = new BigDecimal(v1);</p><p>  BigDecimal b2 = new BigDecimal(v2);</p><p>  return b1.compareTo(b2);</p><p><b>  }</b></p>&

34、lt;p><b>  }</b></p><p>  package org.decimalcalculate;</p><p>  import java.io.BufferedReader;</p><p>  import java.io.IOException;</p><p>  import java.

35、io.InputStreamReader;</p><p>  import java.util.ArrayList;</p><p>  import java.util.StringTokenizer;</p><p>  import org.bayes.*;</p><p>  public class TestBayes {<

36、/p><p>  public ArrayList<String> readTestData() throws IOException {</p><p>  ArrayList<String> candAttr = new ArrayList<String>();</p><p>  BufferedReader reader =

37、new BufferedReader(new InputStreamReader(</p><p>  System.in));</p><p>  String str = "";</p><p>  while (!(str = reader.readLine()).equals("")) {</p><

38、;p>  StringTokenizer tokenizer = new StringTokenizer(str);</p><p>  while (tokenizer.hasMoreTokens()) {</p><p>  candAttr.add(tokenizer.nextToken());</p><p><b>  }</b>

39、;</p><p><b>  }</b></p><p>  return candAttr;</p><p><b>  }</b></p><p>  public ArrayList<ArrayList<String>> readTupleData() throws

40、IOException {</p><p>  ArrayList<ArrayList<String>> datas = new ArrayList<ArrayList<String>>();</p><p>  BufferedReader reader = new BufferedReader(new InputStreamReader(

41、</p><p>  System.in));</p><p>  String str = "";</p><p>  while (!(str = reader.readLine()).equals("")) {</p><p>  StringTokenizer tokenizer = new S

42、tringTokenizer(str);</p><p>  ArrayList<String> s = new ArrayList<String>();</p><p>  while (tokenizer.hasMoreTokens()) {</p><p>  s.add(tokenizer.nextToken());</p>

43、;<p><b>  }</b></p><p>  datas.add(s);</p><p><b>  }</b></p><p>  return datas;</p><p><b>  }</b></p><p>  publi

44、c static void main(String[] args) {</p><p>  TestBayes tb = new TestBayes();</p><p>  ArrayList<ArrayList<String>> datas = null;</p><p>  ArrayList<String> testT =

45、 null;</p><p>  Bayes bayes = new Bayes();</p><p><b>  try {</b></p><p>  System.out.println("請輸入訓(xùn)練數(shù)據(jù)集:");</p><p>  datas = tb.readTupleData();<

46、;/p><p>  while (true) {</p><p>  System.out.println("請輸入測試元組:");</p><p>  testT = tb.readTestData();</p><p>  String c = bayes.calculateProbabilityOfClass(datas

47、, testT);</p><p>  System.out.println("The class is: " + c);</p><p><b>  }</b></p><p>  } catch (IOException e) {</p><p>  e.printStackTrace();<

48、;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  package org.bayes;</p><p>  import java.util.ArrayList;<

49、;/p><p>  import java.util.HashMap;</p><p>  import java.util.Map;</p><p>  import org.decimalcalculate.*;</p><p>  public class Bayes {</p><p>  Map<Strin

50、g, ArrayList<ArrayList<String>>> accordingDateOfClassToSort(</p><p>  ArrayList<ArrayList<String>> datas) {</p><p>  Map<String, ArrayList<ArrayList<String>

51、;>> map = new HashMap<String, ArrayList<ArrayList<String>>>();</p><p>  ArrayList<String> t = null;</p><p>  String c = "";</p><p>  for (int

52、 i = 0; i < datas.size(); i++) {</p><p>  t = datas.get(i);</p><p>  c = t.get(t.size() - 1);</p><p>  if (map.containsKey(c)) {</p><p>  map.get(c).add(t);</p>

53、;<p><b>  } else {</b></p><p>  ArrayList<ArrayList<String>> nt = new ArrayList<ArrayList<String>>();</p><p>  nt.add(t);</p><p>  map.put

54、(c, nt);</p><p><b>  }</b></p><p><b>  }</b></p><p>  return map;</p><p><b>  }</b></p><p>  public String calculatePro

55、babilityOfClass(</p><p>  ArrayList<ArrayList<String>> datas, ArrayList<String> testT) {</p><p>  Map<String, ArrayList<ArrayList<String>>> doc = this</p&g

56、t;<p>  .accordingDateOfClassToSort(datas);</p><p>  Object classes[] = doc.keySet().toArray();</p><p>  double maxP = 0.00;</p><p>  int maxPIndex = -1;</p><p>

57、  for (int i = 0; i < doc.size(); i++) {</p><p>  String c = classes[i].toString();</p><p>  ArrayList<ArrayList<String>> d = doc.get(c);</p><p>  double pOfC = Decim

58、alCalculate.div(d.size(), datas.size(), 3);</p><p>  for (int j = 0; j < testT.size(); j++) {</p><p>  double pv = this.pOfV(d, testT.get(j), j);</p><p>  pOfC = DecimalCalculate

59、.mul(pOfC, pv);</p><p><b>  }</b></p><p>  if (pOfC > maxP) {</p><p>  maxP = pOfC;</p><p>  maxPIndex = i;</p><p><b>  }</b><

60、;/p><p><b>  }</b></p><p>  return classes[maxPIndex].toString();</p><p><b>  }</b></p><p><b>  /**</b></p><p>  private d

61、ouble pOfV(ArrayList<ArrayList<String>> d, String value, int index) {</p><p>  double p = 0.00;</p><p>  int count = 0;</p><p>  int total = d.size();</p><p&g

62、t;  ArrayList<String> t = null;</p><p>  for (int i = 0; i < total; i++) {</p><p>  if (d.get(i).get(index).equals(value)) {</p><p><b>  count++;</b></p>

63、<p><b>  }</b></p><p><b>  }</b></p><p>  p = DecimalCalculate.div(count, total, 3);</p><p><b>  return p;</b></p><p><b>

64、;  }</b></p><p><b>  }</b></p><p>  第四部分 程序測試與結(jié)果分析</p><p><b>  4.1程序測試</b></p><p><b>  4.2結(jié)果分析</b></p><p>  該截圖是

65、在測試算法時過程的截圖。運行無誤</p><p>  第五部分 總結(jié)與心得體會</p><p>  5.1總結(jié)與心得體會</p><p>  該算法是貝葉斯算法,使用java語言通過對象集合保存數(shù)據(jù)再通過三重for循環(huán)實現(xiàn)的簡單樸素貝葉斯算法,該算法只是適應(yīng)于一般的情況。不足之處在于沒有進(jìn)行輸入驗證,如果輸入非法字符就會產(chǎn)生異常使程序死掉,如下圖:</p&g

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論