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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

集成学习之Adaboost(提升方法)

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 集成学习之Adaboost(提升方法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Adaboost

提升方法就是從弱學習器出發,反復學習,得到一系列弱分類器(基本分類器),然后組合這些弱分類器,構成一個強分類器。

基本思路

待解決問題

1、每一輪如何改變訓練數據的權值或概率分布
2、如何將弱分類器組合成強分類器

解決方法

1、高低賦權:提高在前一輪分類中分類錯誤的樣本的權值,降低分類正確的樣本的權值(分類問題被一系列弱分類器“分而治之”)
2、加權多數表決:加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用。(因為Adaboost最終目標就是要提高分類效率,分類誤差率低作用就好,因此要提高其在整個系統中的權值)

*弱分類器采用串聯的形式,后一輪的演變與前一輪的訓練結果緊密相關。

Adaboost算法

以二分類訓練數據集為例 ,每個樣本由實例和標記組成,T={(x~i~, y~i~)} x屬于Rn,y屬于{1, -1}

步驟


(2)(a)中I函數表示指數函數,當括號內為True時,輸出為1否則輸出為0,所以整個et可以理解為所有被分類器誤分類的樣本占所有樣本的比例,即該分類器的出錯率。值得強調的一點是,由于第一輪所有樣本的權重相同,所以et就是出錯率,但是隨著新一輪的測試的進行,就要開始調節權重,即前文所提到的高低賦權,著重調高被誤分類的樣本的權值,調低被正確分類的樣本的權值。
此外et=∑P(Ht(xi)≠yi)(被G誤分類樣本的權值之和)
(b)中的at表示各基本分類器在最終分類器的線性組合中的重要性,因為et是分類錯誤率,一旦分類錯誤率大于1/2,那么它對應基本分類器的分類性能就比較弱,分類效果還不如瞎猜的好,那么當錯誤率小于等于1/2的時候,at>0,而且log函數是一個隨著et減小而增大的函數,那么它在最終分類器中的作用就比較強,即分類誤差率越小的基本分類器在最終分類器中的作用越大。
?對新一輪權值的更新,誤分類樣本的權值得到擴大,正確分類的樣本權值減小,因為分子位置 會隨著正誤分類指數的位置為正或負,若指數位置為正的時候相比于負對最終結果影響會大。

at之和并不為1.其中sign為符號函數,最終結果取決于所有分類器的分類結果,少數服從多數。

import pdb import numpy as np import operator import math def dataset():data=[0,1,2,3,4,5,6,7,8,9]labels=[1,1,1,-1,-1,-1,1,1,1,-1]return data,labels def mytree(data,label,D1): #生成最優決策樹,D是權值point=(np.array(data[:-1])+np.array(data[1:]))/2 #取data中相鄰兩者之間的平均值#結果:array([0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5])一共有九個劃分點dic={}sign={}for i in point: #遍歷分割點predict1=np.array(data<i) #判斷分割點左邊為1 生成[true,false]predict1=(predict1+0)+(predict1-1) #將true和false結果轉換為[1,-1] predict=[0,1] 2*predict-1=[1,-1]result1=sum(abs(predict1-label)/2*D1) #誤差predict2 = np.array(data > i) #判斷右邊為1predict2 = (predict2 + 0) + (predict2 - 1) result2 = sum(abs(predict2 - label) / 2 * D1) #誤差em abs函數是取絕對值 當predict和label相同的時候被抵消,相異的時候變成原來的二倍if result1<=result2: #保存符號和左右邊哪個結果更好dic[i]=result1sign[i]='<'else:dic[i]=result2sign[i]='>'bestpoint = sorted(dic.items(),key=operator.itemgetter(1)) #對dic列表排序,以item中的第二個元素為索引鍵,即value#返回一個可調用對象,用于從運算對象中獲取元素,其實是采用運算對象的_getitem_()方法。如果指定了多個項目,返回一個元組形式。return bestpoint[0],sign[bestpoint[0][0]] # bestpoint表示返回列表第一位元素,即錯誤率最低的元素,sign對象index是i,value是‘<’或者> def Zm1(label,Gm,a,D1): #返回當前樣本的權重 D1是一個1*10的矩陣sum=0for i in range(len(label)): #label長度為10sum+=D1[i]*math.e**(-a*label[i]*Gm[i]) #sum就是歸一化因子newD1=[] #創建對象,用來存儲新一輪各訓練數據的權重for i in range(len(label)):w=D1[i]/sum*math.e**(-a*label[i]*Gm[i])newD1.append(w)return newD1 def adaboot1():data,label=dataset() #獲取數據集和標簽文件 D1=[1/len(data)]*len(data) #求每一個樣本的初始權重,0.1bestpoint=[] #保存目前最佳的分割點besta=[] #保存每一棵基決策樹對應的權重signall=[] #保存每一個最佳分割點對應的符號(大于或小于)result=[] #保存每個基決策樹對樣本分類的結果for i in range(20):ht,sign=mytree(data,label,D1)#???當前最好的樹 ,ht是每棵樹最終選好的emprint(ht)signall.append(sign) #保依次存記號bestpoint.append(ht[0]) #保存當前最佳分割點 ht表示bestpoint列表中的兩個內容。一個是劃分點一個是錯誤率。if sign==str('>'):Gm= np.array(data > ht[0]) Gm = (Gm+0) + (Gm-1)else:Gm= np.array(data < ht[0])Gm = (Gm+ 0) + (Gm- 1) #樣本代入樹中得到當前樣本結果a=0.5*(math.log((1-ht[1])/ht[1])) # 通過誤差計算得到基決策樹權值besta.append(a) # 依次保存每棵基決策樹對應的權重。result.append(Gm) #依次保存每個基分類器D1=Zm1(label,Gm,a,D1) #計算得到每個樣本點的權值sum1=[0]*len(data) # [0]此時是一個int類型,len(data)個int組成sub數組,list類型. print(len(result),len(besta)) #sum變成list類型 ,輸出形式:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]for i in range(len(result)): #以下循環計算當前結果是否達到最優sum1+=result[i]*besta[i]#result=w1f(x1)+w2f(x2)+..print(sum1)sum1 = np.array(sum1>=0) sum1 = (sum1 + 0) + (sum1- 1) if sum(sum1==label)==len(data): #如果結果相等,則輸出以下語句 ,最終誤分類點為零個,完成整個建模過程print("一種生成{}棵基函數".format(len(result)))for i in range(len(result)): #result長度為3,要循環3次dic = {} #創建對象print ("第{}棵決策樹是".format(i+1)) #i+1精度加一if signall[i]==str('>'): #如果最佳分割點對應的符號是‘>’dic['num'+'>' + str(bestpoint[i])]=1 dic['num'+'<' + str(bestpoint[i])] = -1if signall[i] == str('<'):dic['num'+'<' + str(bestpoint[i])] = 1dic['num'+'>' + str(bestpoint[i])] = -1print(dic)print ("權值是{}".format(besta[i]))print()break adaboot1()在這里插入代碼片

代碼借鑒https://blog.csdn.net/qq_37960402/article/details/88539253

總結

以上是生活随笔為你收集整理的集成学习之Adaboost(提升方法)的全部內容,希望文章能夠幫你解決所遇到的問題。

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