近日開始學習機器學習,拜讀了一下李航老師的《統計學習方法》,有點不求甚解,為了讓自己更好的理解,寫些系列文章吧。
感知機部落格,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理清了思路,括號裡是書裡的公式,第一次寫博文,敬請指教 第一章 統計學習方 第二章 感知機 每個方法其實只需要著重掌握三要素和輸入輸出就可以了,主要看模型 策略和演算法。感知機主要是二類分類的線性分類模型。看到後面會注意感知機和支援向量機的區別...