




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章Python程序設(shè)計(jì)基礎(chǔ)人工智能與計(jì)算機(jī)應(yīng)用6.8.3數(shù)據(jù)分類實(shí)例—鳶尾花分類案例分析不同品種的鳶尾花的花萼和花瓣長(zhǎng)度和寬度存在明顯的差異,如下圖表所示。根據(jù)花萼、花瓣的長(zhǎng)度和寬度可以將鳶尾花劃分為不同的品種。Setisa(山尾)Virginica(維吉尼亞鳶尾)Versicolour(雜色鳶尾)花萼長(zhǎng)度花萼寬度花瓣長(zhǎng)度花瓣寬度5.13.51.40.24.93.01.40.24.73.21.30.24.63.11.50.25.03.61.40.25
個(gè)鳶尾花樣本的特征數(shù)據(jù)我們使用經(jīng)典的機(jī)器學(xué)習(xí)算法——KNN算法通過(guò)花萼長(zhǎng)度,花萼寬度,花瓣長(zhǎng)度,花瓣寬度4個(gè)屬性預(yù)測(cè)鳶尾花卉屬于Setosa,Versicolour,Virginica三個(gè)種類中的哪一類。本次授課內(nèi)容一、使用Python編寫(xiě)KNN算法對(duì)鳶尾花進(jìn)行分類二、使用機(jī)器學(xué)習(xí)庫(kù)Sklearn對(duì)鳶尾花進(jìn)行分類一使用Python編寫(xiě)KNN算法對(duì)鳶尾花進(jìn)行分類1.KNN算法步驟
(1)計(jì)算預(yù)測(cè)數(shù)據(jù)與訓(xùn)練數(shù)據(jù)之間的距離。(2)將距離進(jìn)行遞增排序。(3)選擇距離最小的前k個(gè)數(shù)據(jù)。(4)確定前k個(gè)數(shù)據(jù)的類別,及其出現(xiàn)頻率。(5)返回前k個(gè)數(shù)據(jù)中頻率最高的類別(預(yù)測(cè)結(jié)果)。2.KNN算法的關(guān)鍵問(wèn)題
KNN算法有兩個(gè)關(guān)鍵,分別是距離計(jì)算和k值選擇。(1)距離計(jì)算。
已知數(shù)據(jù)和測(cè)試數(shù)據(jù)的距離有多種度量方式,如歐氏距離、余弦距離、漢明距離、曼哈頓距離等。在KNN算法中常使用的距離計(jì)算方式是歐式距離,計(jì)算公式為:(2)K值選擇。由于不同的測(cè)試數(shù)據(jù)對(duì)k值有不同的要求,因此可以通過(guò)交叉驗(yàn)證的方式進(jìn)行最佳k值的驗(yàn)證。它的核心思想就是把一些可能的k值,逐個(gè)嘗試一遍,選出最佳k值。3.具體操作過(guò)程
(1)導(dǎo)入程序使用的工具包NumPy、Pandas、Counter
、Matplotlib。importnumpyasnp #導(dǎo)入numpy處理多維數(shù)組importpandasaspd #導(dǎo)入pandas將數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)幀形式fromcollectionsimportCounter #從collections包中導(dǎo)入Counter,用于計(jì)數(shù)importmatplotlib.pyplotasplt #導(dǎo)入繪圖模塊(2)載入鳶尾花數(shù)據(jù)集。def
Data(): #定義函數(shù),用于加載鳶尾花數(shù)據(jù)集
iris=pd.read_csv('C:/Python實(shí)驗(yàn)/素材/iris.csv') #從本地文件中讀取數(shù)據(jù)
returniris #返回讀取的數(shù)據(jù)(3)劃分?jǐn)?shù)據(jù)集。def
Datasets(iris):#定義函數(shù),用于劃分?jǐn)?shù)據(jù)集。函數(shù)的參數(shù)是鳶尾花數(shù)據(jù)集
index=np.random.permutation(len(iris))#將150個(gè)樣本打亂順序
index=index[0:15]#取出前15個(gè)樣本數(shù)據(jù)作為測(cè)試數(shù)據(jù)集,剩下的135個(gè)樣本作為訓(xùn)練集
Test=iris.take(index) #測(cè)試數(shù)據(jù)集
Train=iris.drop(index) #訓(xùn)練數(shù)據(jù)集
datasets=[Test,Train] #生成數(shù)據(jù)集
returndatasets #返回劃分后的數(shù)據(jù)集3.具體操作過(guò)程(4)KNN算法。def
KNN(Train,Test,GT,k): #定義函數(shù),用于實(shí)現(xiàn)KNN算法。
Train_num=Train.shape[0] #獲得訓(xùn)練集個(gè)數(shù)
tests=np.tile(Test,(Train_num,1))-Traindistance=(tests**2)**0.5 #計(jì)算歐氏距離
result=distance.sum(axis=1) #從小到大排序,返回索引值
results=result.argsort()label=[] #定義空標(biāo)簽
foriin
range(k):label.append(GT[results[i]]) #把結(jié)果添加到標(biāo)簽中
returnlabel #返回標(biāo)簽3.具體操作過(guò)程(5)交叉驗(yàn)證(確定最佳k值)。def
cross_define_K(Train,Test,GT):
#定義函數(shù),用于尋找最佳的k值precision=[]#準(zhǔn)確度
forkin
range(1,50):
#逐個(gè)嘗試1到50的所有值true=0
foriinTest:Test1=[i[0],i[1],i[2],i[3]]result=KNN(Train,Test1,GT,k)
#調(diào)用KNN函數(shù)collection=Counter(result)#返回每個(gè)標(biāo)簽出現(xiàn)的次數(shù)
result=collection.most_common(1)#返回出現(xiàn)次數(shù)最多的標(biāo)簽
ifresult[0][0]==i[4]:true+=1#計(jì)算預(yù)測(cè)準(zhǔn)確的個(gè)數(shù)
success=true/len(Test)#計(jì)算預(yù)測(cè)準(zhǔn)確率
precision.append(success)#k1=range(1,50)#plt.rcParams['font.sans-serif']=['SimHei’]#正常顯示中文
#plt.plot(k1,precision,label='line1',color='g',marker='.',markerfacecolor='pink',markersize=9)#plt.xlabel('k')#plt.ylabel('Precision')#plt.title('交叉驗(yàn)證k值')#plt.legend()#plt.show()#畫(huà)圖顯示交叉驗(yàn)證K的值,如圖所示k=precision.index(max(precision))+1#獲取k的值
print("準(zhǔn)確度precision最大時(shí),k=",k)
#輸出準(zhǔn)確度最大時(shí)k的取值
returnk
#返回k的值3.具體操作過(guò)程(6)主程序,調(diào)用函數(shù)和輸出結(jié)果if__name__=="__main__": #主程序
iris=Data() #讀取鳶尾花數(shù)據(jù)集
print("\niris數(shù)據(jù)集:")
print(iris) #輸出鳶尾花數(shù)據(jù)集
datasets=Datasets(iris) #對(duì)鳶尾花數(shù)據(jù)集進(jìn)行劃分
print("\n測(cè)試數(shù)據(jù)集:")
print(datasets[0]) #輸出測(cè)試數(shù)據(jù)集
Train=datasets[1].drop(columns=['Species']).values #將訓(xùn)練數(shù)據(jù)集的實(shí)際值隱去
GT=datasets[1]['Species'].values #讀取訓(xùn)練數(shù)據(jù)集的實(shí)際值
Test=datasets[0].values #讀取測(cè)試數(shù)據(jù)集
k=cross_define_K(Train,Test,GT) #調(diào)用交叉驗(yàn)證結(jié)果
true=0
print("\n預(yù)測(cè)結(jié)果:")
foriinTest:Test=[i[0],i[1],i[2],i[3]]result=KNN(Train,Test,GT,k) #調(diào)用KNN算法
collection=Counter(result)result=collection.most_common(1)
print("預(yù)測(cè)='"+result[0][0]+"',\t\t實(shí)際='"+i[4]+“’”) #輸出預(yù)測(cè)值和實(shí)際值
ifresult[0][0]==i[4]: #計(jì)算預(yù)測(cè)準(zhǔn)確的個(gè)數(shù)
true+=1success=(true/len(datasets[0]))*100 #計(jì)算預(yù)測(cè)準(zhǔn)確率
print("\n預(yù)測(cè)準(zhǔn)確率:",success,"%") #輸出預(yù)測(cè)準(zhǔn)確率二使用機(jī)器學(xué)習(xí)庫(kù)Sklearn對(duì)鳶尾花進(jìn)行分類1.使用Sklearn進(jìn)行機(jī)器學(xué)習(xí)的主要步驟
(1)獲取數(shù)據(jù)。fromsklearn.preprocessingimportStandardScaler#導(dǎo)入數(shù)據(jù)處理模塊中的標(biāo)準(zhǔn)化函數(shù)fromsklearnimportdatasets #導(dǎo)入datasets,以便數(shù)據(jù)獲取fromsklearn.model_selectionimporttrain_test_split#導(dǎo)入train_test_split用于劃分?jǐn)?shù)據(jù)fromsklearn.neighborsimportKNeighborsClassifier#導(dǎo)入sklearn中的KNN算法KNeighborsClassifieriris=datasets.load_iris() #加載sklearn庫(kù)中的鳶尾花數(shù)據(jù)集(2)數(shù)據(jù)預(yù)處理。#劃分?jǐn)?shù)據(jù)集#將數(shù)據(jù)集劃分為訓(xùn)練數(shù)據(jù)集與測(cè)試數(shù)據(jù)集。其中,test_size=0.2表示測(cè)試數(shù)據(jù)集占20%x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度按揭車抵押借款合同資產(chǎn)評(píng)估與定價(jià)
- 2025年度玻璃幕墻設(shè)計(jì)與施工一體化服務(wù)合同
- 2025年度地暖系統(tǒng)研發(fā)與生產(chǎn)質(zhì)量標(biāo)準(zhǔn)合同
- 2025年保鮮庫(kù)自動(dòng)化控制系統(tǒng)集成合同
- 2025年度環(huán)保污水處理承包加工合同
- 2025年度老舊小區(qū)改造租賃合同范本
- 班級(jí)學(xué)習(xí)方法的互相借鑒計(jì)劃
- 供應(yīng)鏈優(yōu)化的職業(yè)發(fā)展計(jì)劃
- 美術(shù)教育研究的熱點(diǎn)與發(fā)展趨勢(shì)計(jì)劃
- 幼兒園小班的突發(fā)事件應(yīng)急預(yù)案工作計(jì)劃
- 四川省自貢市2024-2025學(xué)年上學(xué)期八年級(jí)英語(yǔ)期末試題(含答案無(wú)聽(tīng)力音頻及原文)
- 2025年生物安全年度工作計(jì)劃
- 人教版數(shù)學(xué)六年級(jí)下冊(cè)全冊(cè)核心素養(yǎng)目標(biāo)教學(xué)設(shè)計(jì)
- 通用電子嘉賓禮薄
- (研究生)商業(yè)倫理與會(huì)計(jì)職業(yè)道德ppt教學(xué)課件(完整版)
- 火力發(fā)電廠水汽化學(xué)監(jiān)督導(dǎo)則
- 行動(dòng)學(xué)習(xí)-組織能力提升新境界培訓(xùn)課件.ppt
- QTD01鋼質(zhì)無(wú)縫氣瓶檢驗(yàn)工藝指導(dǎo)書(shū)課件
- 新編日語(yǔ)第二冊(cè)(全)
- 《質(zhì)量管理體系文件》2015版質(zhì)量管理體系內(nèi)審報(bào)告 (2)
- 中學(xué)部春季學(xué)期升旗主題、班會(huì)課安排
評(píng)論
0/150
提交評(píng)論