李航《統計學習方法》學習日記 2

2021-10-24 05:24:58 字數 3304 閱讀 3072

近日開始學習機器學習,拜讀了一下李航老師的《統計學習方法》,有點不求甚解,為了讓自己更好的理解,寫些系列文章吧。

感知機部落格,github原始碼

knn部落格,github原始碼

k近鄰學習和感知機其實有點類似,都是分類問題,但是感知機採用了超平面將分成兩類,而k近鄰是多分類,找到樣本點周圍的k個點,其中佔數目最多的類即**輸出的類。

根據統計學習方法中的演算法解析

從圖中演算法我們可以看出,k近鄰演算法其實沒有乙個明顯的訓練過程,他就是讓樣本點不斷計算最近k個點的距離,在對距離進行投票選擇,票選最多時即為該樣本的類別。

那該如何度量距離,我們列出以下幾種常用的方法

本次實現採用的時歐式距離度量,其實這就是我們常見的兩點之間的距離,由公式可以看出,距離計算將會耗費很多的時間。

'''

descripttion: 李航《統計學習方法》k鄰近原理

version: v1.0

author: wenzeng cai

date: 2020-09-02 10:22:47

lasteditors: wenzeng cai

lastedittime: 2020-09-02 12:27:47

'''import numpy as np

import time

defloaddata

(filename)

:'''

name: 載入資料

msg:

param 檔名

return 資料集和標籤

'''print

('載入資料'

) data,label=

, fr =

open

(filename)

for i in fr.readlines():

curline=i.strip(

).split(

',')

[int

(num)

for num in curline[1:

]])int

(curline[0]

))return data,label

defcaldist

(x1,x2)

:'''

name: 計算兩個向量歐氏距離

msg:

param 兩個向量

return 距離

'''print

('計算距離'

)return np.sqrt(np.

sum(np.square(x1-x2)))

defgetcloset

(traindata,trainlabel,x,topk)

:'''

name: 得到樣本的標籤

msg: 通過獲取樣本最近的topk點,數目最多的那個為標籤

param 訓練資料,訓練標籤,樣本點,最近點的數目

return 樣本的標籤

'''print

('計算標籤'

) n=

len(trainlabel)

dist=[0

]*nfor i in

range

(len

(traindata)):

x2=traindata[i]

y=caldist(x2,x)

#argsort返回的是公升序的標籤,我們取前k個最小的

topklist= np.argsort(dist)

[:topk]

labellist=[0

]*20for index in topklist:

# 計算數量,返回最多的

labellist[

int(trainlabel[index])]

+=1return labellist.index(

max(labellist)

)def

test

(traindata,trainlable,testdata,testlabel,topk)

:print

('測試'

) traindatamat = np.mat(traindata)

; trainlabelmat = np.mat(trainlable)

.t testdatamat = np.mat(testdata)

; testlabelmat = np.mat(testlabel)

.t

errcnt=

0for i in

range

(300):

x=testdatamat[i]

print

('測試集形狀'

,np.shape(traindatamat)

) y=getcloset(traindatamat,trainlabelmat,x,topk)

if y!=testlabelmat[i]

: errcnt+=

1return1-

(errcnt/

300)

if __name__ ==

"__main__"

: start = time.time(

)#獲取訓練集

traindataarr, trainlabelarr = loaddata(

'../mnist/mnist_train.csv'

)#獲取測試集

testdataarr, testlabelarr = loaddata(

'../mnist/mnist_test.csv'

)#計算測試集正確率

print

('主函式'

,np.shape(traindataarr)

) accur = test(traindataarr, trainlabelarr, testdataarr, testlabelarr,25)

#列印正確率

print

('accur is:%d'

%(accur *

100)

,'%'

) end = time.time(

)#顯示花費時間

print

('time span:'

, end - start)

李航 統計學習方法 學習筆記 1 統計學習方法概論

1.4 模型評估與模型選擇 1.5 其他.考研終於告一段落,接下來是安心等待入學。想利用這段時間系統學習一下機器學習基礎,簡單記錄一下自己的學習過程,也算是對自己的一種監督。下面詳細介紹一下 策略 首先引入損失函式與風險函式的概念。損失函式度量模型一次 的好壞,風險函式度量平均意義下模型 的好壞。統...

統計學習方法概論 《統計學習方法》李航著

統計學習由 監督學習,非監督學習,半監督學習和強化學習組成。監督學習方法主要包括 分類 標註 與 回歸問題 回歸問題 輸入變數 和 輸出變數 均為連續變數的 問題 分類問題 輸出變數為有限個離散變數的 問題 標註問題 輸入與輸出變數均為變數序列的 問題 統計學習三要素 模型,策略,演算法 損失函式度...

《統計學習方法》 李航 學習大綱

最近在學習李航寫的統計學習方法概論,每一章都用xmind理清了思路,括號裡是書裡的公式,第一次寫博文,敬請指教 第一章 統計學習方 第二章 感知機 每個方法其實只需要著重掌握三要素和輸入輸出就可以了,主要看模型 策略和演算法。感知機主要是二類分類的線性分類模型。看到後面會注意感知機和支援向量機的區別...