日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java naive方法_朴素贝叶斯方法(Naive Bayes Method)

發布時間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java naive方法_朴素贝叶斯方法(Naive Bayes Method) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

樸素貝葉斯是一種很簡單的分類方法,之所以稱之為樸素,是因為它有著非常強的前提條件-其所有特征都是相互獨立的,是一種典型的生成學習算法。所謂生成學習算法,是指由訓練數據學習聯合概率分布P(X,Y),然后求得后驗概率P(X|Y)。具體來說,利用訓練數據學習P(X|Y)和p(Y)的估計,得到聯合概率分布:

概率估計可以是極大似然估計,或者貝葉斯估計。

假設輸入 X 為n維的向量集合,輸出 Y 為類別,X 和 Y 都是隨機變量。P(X,Y)是X和Y的聯合概率分布,訓練數據集為:

首先,我們要明確我們求解的目標是:,即給定某個輸入X,我們要判斷其所屬類別Ck。由概率論知識,我們有:

其中,

代入公式得:

這是樸素貝葉斯分類的基本公式。于是,樸素貝葉斯分類器可以表示為

由于,分母對所有的Ck都是相同的,所以

那么如果給定一個輸入 X,我們只需要找到一個類別Ck,使得最大。那么Ck,就是 X 的最佳類別了。

下面我們來講講樸素貝葉斯法的參數估計,為什么要估計樸素貝葉斯的參數呢,這些參數是什么?首先,我們要明確?,F實中,給定我們一批數據,我們就知道其分布,但是具體的數據分布的概率我們是不知道的。也就是說先驗概率和條件概率我們是不知道的,這就需要我們來利用其數據的分布估計其先驗概率和條件概率了。統計學習中最常用的參數估計就是極大似然估計了,這里我們也可以用貝葉斯估計,其實就是在極大似然估計基礎上添加了拉普拉斯平滑(Laplace smoothing)。

由于極大似然估計之前已經講到過,這里公式我也沒有具體來推,所以先驗概率和條件概率直接給出來。

先驗概率P(Y = Ck)和條件概率的極大似然估計如下:

這樣,給定具體的數據,我們就可以估計其先驗概率和條件概率,進而計算出后驗概率得到所屬類別。

同樣,貝葉斯估計和極大似然估計差不多,貝葉斯估計只是在極大似然估計上添加了一個拉普拉斯平滑。具體如下:

條件概率的貝葉斯估計如下:

先驗概率的貝葉斯估計如下:

下面來給出一個簡單的樸素貝葉斯實現代碼,代碼比較容易理解。只是課本上給出的特征是離散的,而code里面的特征是連續的。原理上其實是一樣一樣的~

1: % NAIVE BAYES CLASSIFIER

2:

3: clear

4: tic

5: disp('--- start ---')

6:

7: distr='normal';

8: distr='kernel';

9:

10: % read data

11: White_Wine = dataset('xlsfile', 'White_Wine.xlsx');

12: X = double(White_Wine(:,1:11));

13: Y = double(White_Wine(:,12));

14:

15: % Create a cvpartition object that defined the folds

16: c = cvpartition(Y,'holdout',.2);

17:

18: % Create a training set

19: x = X(training(c,1),:);

20: y = Y(training(c,1));

21: % test set

22: u=X(test(c,1),:);

23: v=Y(test(c,1),:);

24:

25: yu=unique(y);

26: nc=length(yu); % number of classes

27: ni=size(x,2); % independent variables

28: ns=length(v); % test set

29:

30: % compute class probability

31: for i=1:nc

32: fy(i)=sum(double(y==yu(i)))/length(y);

33: end

34:

35: switch distr

36:

37: case 'normal'

38:

39: % normal distribution

40: % parameters from training set

41: for i=1:nc

42: xi=x((y==yu(i)),:);

43: mu(i,:)=mean(xi,1);

44: sigma(i,:)=std(xi,1);

45: end

46: % probability for test set

47: for j=1:ns

48: fu=normcdf(ones(nc,1)*u(j,:),mu,sigma);

49: P(j,:)=fy.*prod(fu,2)';

50: end

51:

52: case 'kernel'

53:

54: % kernel distribution

55: % probability of test set estimated from training set

56: for i=1:nc

57: for k=1:ni

58: xi=x(y==yu(i),k);%the feature of dimension-k with respect to label yu(i)

59: ui=u(:,k);

60: fuStruct(i,k).f=ksdensity(xi,ui);

61: end

62: end

63: % re-structure

64: for i=1:ns

65: for j=1:nc

66: for k=1:ni

67: fu(j,k)=fuStruct(j,k).f(i);

68: end

69: end

70: P(i,:)=fy.*prod(fu,2)';

71: end

72:

73: otherwise

74:

75: disp('invalid distribution stated')

76: return

77:

78: end

79:

80: % get predicted output for test set

81: [pv0,id]=max(P,[],2);

82: for i=1:length(id)

83: pv(i,1)=yu(id(i));

84: end

85:

86: % compare predicted output with actual output from test data

87: confMat=myconfusionmat(v,pv);

88: disp('confusion matrix:')

89: disp(confMat)

90: conf=sum(pv==v)/length(pv);

91: disp(['accuracy = ',num2str(conf*100),'%'])

92:

93: toc

1: function confMat=myconfusionmat(v,pv)

2:

3: yu=unique(v);

4: confMat=zeros(length(yu));

5: for i=1:length(yu)

6: for j=1:length(yu)

7: confMat(i,j)=sum(v==yu(i) & pv==yu(j));

8: end

9: end

如果想要實驗數據的話,請在博客下面評論區域注明,我看到了會第一時間上傳。

總結

以上是生活随笔為你收集整理的java naive方法_朴素贝叶斯方法(Naive Bayes Method)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。