国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

adaboost運行函數的算法怎么來的?基本程序代碼實現詳細

lviY_AI_shequ ? 2018-07-21 10:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一.Adaboost理論部分

1.1 adaboost運行過程

注釋:算法是利用指數函數降低誤差,運行過程通過迭代進行。其中函數的算法怎么來的,你不用知道!當然你也可以嘗試使用其它的函數代替指數函數,看看效果如何。

1.2 舉例說明算法流程

1.3 算法誤差界的證明

注釋:誤差的上界限由Zm約束,然而Zm又是由Gm(xi)約束,所以選擇適當的Gm(xi)可以加快誤差的減小。

二.代碼實現

2.1程序流程圖

2.2基本程序實現

注釋:真是倒霉玩意,本來代碼全部注釋好了,突然Ubuntu奔潰了,全部程序就GG了。。。下面的代碼就是官網的代碼,部分補上注釋。現在使用Deepin桌面版了,其它方面都比Ubuntu好,但是有點點卡。

from numpy import *

def loadDataSet(fileName): #general function to parse tab -delimited floats

numFeat = len(open(fileName).readline().split(' ')) #get number of fields

dataMat = []; labelMat = []

fr = open(fileName)

for line in fr.readlines():

lineArr =[]

curLine = line.strip().split(' ')

for i in range(numFeat-1):

lineArr.append(float(curLine[i]))

dataMat.append(lineArr)

labelMat.append(float(curLine[-1]))

return dataMat,labelMat

def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):#just classify the data

retArray = ones((shape(dataMatrix)[0],1))

if threshIneq == 'lt':

retArray[dataMatrix[:,dimen] <= threshVal] = -1.0

else:

retArray[dataMatrix[:,dimen] > threshVal] = -1.0

return retArray

def buildStump(dataArr,classLabels,D):

dataMatrix = mat(dataArr); labelMat = mat(classLabels).T

m,n = shape(dataMatrix)

numSteps = 10.0; bestStump = {}; bestClasEst = mat(zeros((m,1)))

minError = inf #init error sum, to +infinity

for i in range(n):#loop over all dimensions

rangeMin = dataMatrix[:,i].min(); rangeMax = dataMatrix[:,i].max();

stepSize = (rangeMax-rangeMin)/numSteps

for j in range(-1,int(numSteps)+1):#loop over all range in current dimension

for inequal in ['lt', 'gt']: #go over less than and greater than

threshVal = (rangeMin + float(j) * stepSize)

predictedVals = stumpClassify(dataMatrix,i,threshVal,inequal)#call stump classify with i, j, lessThan

errArr = mat(ones((m,1)))

errArr[predictedVals == labelMat] = 0

weightedError = D.T*errArr #calc total error multiplied by D

#print "split: dim %d, thresh %.2f, thresh ineqal: %s, the weighted error is %.3f" % (i, threshVal, inequal, weightedError)

if weightedError < minError:

minError = weightedError

bestClasEst = predictedVals.copy()

bestStump['dim'] = i

bestStump['thresh'] = threshVal

bestStump['ineq'] = inequal

return bestStump,minError,bestClasEst

def adaBoostTrainDS(dataArr,classLabels,numIt=40):

weakClassArr = []

m = shape(dataArr)[0]

D = mat(ones((m,1))/m) #init D to all equal

aggClassEst = mat(zeros((m,1)))

for i in range(numIt):

bestStump,error,classEst = buildStump(dataArr,classLabels,D)#build Stump

#print "D:",D.T

alpha = float(0.5*log((1.0-error)/max(error,1e-16)))#calc alpha, throw in max(error,eps) to account for error=0

bestStump['alpha'] = alpha

weakClassArr.append(bestStump) #store Stump Params in Array

#print "classEst: ",classEst.T

expon = multiply(-1*alpha*mat(classLabels).T,classEst) #exponent for D calc, getting messy

D = multiply(D,exp(expon)) #Calc New D for next iteration

D = D/D.sum()

#calc training error of all classifiers, if this is 0 quit for loop early (use break)

aggClassEst += alpha*classEst

#print "aggClassEst: ",aggClassEst.T

aggErrors = multiply(sign(aggClassEst) != mat(classLabels).T,ones((m,1)))

errorRate = aggErrors.sum()/m

print ("total error: ",errorRate)

if errorRate == 0.0: break

return weakClassArr,aggClassEst

def adaClassify(datToClass,classifierArr):

dataMatrix = mat(datToClass)#do stuff similar to last aggClassEst in adaBoostTrainDS

m = shape(dataMatrix)[0]

aggClassEst = mat(zeros((m,1)))

for i in range(len(classifierArr)):

classEst = stumpClassify(dataMatrix,classifierArr[i]['dim'],

classifierArr[i]['thresh'],

classifierArr[i]['ineq'])#call stump classify

aggClassEst += classifierArr[i]['alpha']*classEst

#print aggClassEst

return sign(aggClassEst)

def plotROC(predStrengths, classLabels):

import matplotlib.pyplot as plt

cur = (1.0,1.0) #cursor

ySum = 0.0 #variable to calculate AUC

numPosClas = sum(array(classLabels)==1.0)#標簽等于1的和(也等于個數)

yStep = 1/float(numPosClas); xStep = 1/float(len(classLabels)-numPosClas)

sortedIndicies = predStrengths.argsort()#get sorted index, it's reverse

sortData = sorted(predStrengths.tolist()[0])

fig = plt.figure()

fig.clf()

ax = plt.subplot(111)

#loop through all the values, drawing a line segment at each point

for index in sortedIndicies.tolist()[0]:

if classLabels[index] == 1.0:

delX = 0; delY = yStep;

else:

delX = xStep; delY = 0;

ySum += cur[1]

#draw line from cur to (cur[0]-delX,cur[1]-delY)

ax.plot([cur[0],cur[0]-delX],[cur[1],cur[1]-delY], c='b')

cur = (cur[0]-delX,cur[1]-delY)

ax.plot([0,1],[0,1],'b--')

plt.xlabel('False positive rate'); plt.ylabel('True positive rate')

plt.title('ROC curve for AdaBoost horse colic detection system')

ax.axis([0,1,0,1])

plt.show()

print ("the Area Under the Curve is: ",ySum*xStep)

注釋:重點說明一下非均衡分類的圖像繪制問題,想了很久才想明白!

都是相對而言的,其中本文說的曲線在左上方就為好,也是相對而言的,看你怎么定義個理解!

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4784

    瀏覽量

    98059
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73969

原文標題:《機器學習實戰》AdaBoost算法(手稿+代碼)

文章出處:【微信號:AI_shequ,微信公眾號:人工智能愛好者社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    為Wi-Fi通訊和USB藍牙通信控制設計并支持大型程序代碼的指紋芯片-P1032BF1

    指紋芯片 - P1032BF1是一款基于ARM Cortex-M3的單片機,專為Wi-Fi /藍牙通信控制而設計;能夠實現指紋的圖像采集、特征提取、特征比對,可應用于智能鎖;支持大型程序代碼和擁有大型嵌入式SRAM,也可用于一般的MCU應用。
    的頭像 發表于 01-27 09:46 ?173次閱讀
    為Wi-Fi通訊和USB藍牙通信控制設計并支持大型<b class='flag-5'>程序代碼</b>的指紋芯片-P1032BF1

    Vivado+Vitis將程序固化的Flash的操作流程

    ZYNQ 的程序固化是指將程序代碼永久存儲到非易失性存儲器中,使系統上電后能自動加載運行的過程。主要固化方式:QSPI Flash固化:常用方式,容量小,如啟動代碼、FPGA 配置。N
    的頭像 發表于 01-20 16:17 ?373次閱讀
    Vivado+Vitis將<b class='flag-5'>程序</b>固化的Flash的操作流程

    單片機里的程序運行方式

    我們想要理解單片機是如何運行程序的,我們首先需要了解單片機的組成,我們這里以80C51單片機為例理解程序在單片機中是如何運行的。 單片機的組成8051單片機的內部硬件結構包括: 中
    發表于 01-16 06:57

    用于單片機幾種C語言算法

    采樣有效;否則取上次采樣值作為本次數據的樣本。算法程序代碼如下: 說明:限幅濾波法主要用于處理變化較為緩慢的數據,如溫度、物體的位置等。使用時,關鍵要選取合適的門限制A。通常這可由經驗數據獲得
    發表于 11-27 06:00

    通過優化代碼提高MCU運行效率

    編譯器優化 熟悉并合理使用編譯器優化選項,如GCC的 -O2, -Os。 -O2:側重于速度優化。 -Os:側重于代碼大小優化,有時對緩存更友好,反而更快。 將常用函數聲明為 inline,減少函數
    發表于 11-12 08:21

    復雜的軟件算法硬件IP核的實現

    獨立的 START 信號 用于控制該對象是否開始運行以及用于指示操作完成的 DONE 信號。函數的參數以及返回值則作為該對象的輸入輸出信號。 3.HDL 文件生成 軟件算法
    發表于 10-30 07:02

    TCORDIC算法實現正余弦函數

    TCORDIC算法,由低延遲CORDIC算法和Taylor展開組成。Taylor展開計算作為CORDIC算法的補充,能夠結合CORDIC算法和Taylor展開方式
    發表于 10-29 06:30

    使用Nuclei Studio IDE計算程序運行時間

    時間函數_gettimeofday()的系統時間,該函數的C語言代碼如下所示: 由C代碼可知,tp存儲了兩個變量tv_sec和tv_usec,前者代表秒數s,后者表示微秒us,在想要
    發表于 10-28 08:25

    查找表與多項式近似算法實現初等函數

    逼近的定義區間長度及選取系數的方式決定。 每個子間隔的系數存儲在查找表中。用Xm選擇系數,所以方程變成: 使用查找表與多項式近似結合算法實現對數函數,如下圖所示為指數
    發表于 10-28 08:10

    如何使用恢復算法實現開平方運算

    本文主要描述如何使用恢復算法實現開平方運算。 簡介 開平方的恢復算法其實與除法的恢復算法十分相似。首先我們假設X為輸入的操作數(它應該為
    發表于 10-24 13:33

    嵌入式系統中,FLASH 中的程序代碼必須搬到 RAM 中運行嗎?

    嵌入式系統里,FLASH 中的程序代碼并非必須搬到 RAM 中運行,這得由硬件配置、實際性能需求和應用場景共同決定。就像很多低端單片機,無論是依賴片內 Flash 還是外掛的 SPI NOR
    的頭像 發表于 08-06 10:19 ?1365次閱讀
    嵌入式系統中,FLASH 中的<b class='flag-5'>程序代碼</b>必須搬到 RAM 中<b class='flag-5'>運行</b>嗎?

    詳解hal_entry入口函數

    當使用RTOS時,程序從main函數開始進行線程調度;當沒有使用RTOS時,C語言程序的入口函數main函數調用了hal_entry
    的頭像 發表于 07-25 15:34 ?1987次閱讀

    請問如何創建在 RAM 區域完全獨立運行的閃存驅動程序代碼

    我在開發閃存驅動程序代碼時遇到了一個問題。我將準備好的HEX文件寫入指定的RAM區域,并嘗試使用指針調用,但調用失敗,無法正常擦除或寫入。對于flash的操作代碼已經通過了單獨的測試,為了使其更加
    發表于 07-25 07:33

    基于FPGA的壓縮算法加速實現

    的速度。我們將首先使用C語言進行代碼實現,然后在Vivado HLS中綜合實現,并最終在FPGA板(pynq-z2)上進行硬件實現,同時于jupyter notebook中使用pyth
    的頭像 發表于 07-10 11:09 ?2394次閱讀
    基于FPGA的壓縮<b class='flag-5'>算法</b>加速<b class='flag-5'>實現</b>

    RAKsmart企業服務器上部署DeepSeek編寫運行代碼

    在RAKsmart企業服務器上部署并運行DeepSeek模型的代碼示例和詳細步驟。假設使用 Python + Transformers庫 + FastAPI實現一個基礎的AI服務。主機
    的頭像 發表于 03-25 10:39 ?701次閱讀