本不打算寫感知機模型,因為其實在太簡單,在實際業務中也很少用到!
可後來接觸越來越多的演算法,發現感知機模型才是最為簡接概述分類模型三要素:
模型,策略,演算法!
想來,李航博士將其作為《統計學習方法》分類模型第一章,大概就是出於這個原因!
從這段話中,可以抽象出分類模型三要素:
感知機模型的假設空間:分離超平面
w為法向量,b為截距,確定了這兩個引數,超平面也就確定了;學習策略:誤分類點到超平面的總距離(直觀來看,總距離越小越好!)sign是符號函式;取值
為什麼不以誤分類點的個數作為損失函式?演算法:通過隨機梯度下降法快速找到w,b!我們的目標是最小化損失函式,如下圖:我們學習策略最終的目的是尋找w,b引數的解!這就要求損失函式對w,b連續可導。
而誤分類點的個數無法滿足這個條件!
我們就可以用常用的梯度下降方法來進行更新,對w,b引數分別進行求偏導可得
那麼我們任意初始化w,b之後,碰到誤分類點時,採取的權值更新為w,b分別為:
感知機模型:最終尋求的是滿足條件的滿意解,所以有多個滿足條件的超平面!因為是求最小值,沿著負梯度的方向收斂最快!
import numpy as np
class myperceptron:
def __init__(self):
self.w=none#初始化
self.b=0
self.l_rate=1#學習率設為1
def fit(self,x_train,y_train):
#用樣本點的特徵數更新初始w,如x1=(3,3)t,有兩個特徵,則self.w=[0,0],初始化w補零;x_train.shape[1]表示axis=1,所以為2,x_train.shape[0]表示axis=0,所以為3;
self.w=np.zeros(x_train.shape[1])
i=0while i為了便於調參,將sklearn中的感知機模型也寫出來:
max_iter(迭代次數),當達到迭代次數,模型停止訓練,預設為1000
tol(終止條件):模型收斂條件,感知機模型用「誤分類點到超平面的總距離(直觀來看,總距離越小越好!)」來收斂,所以極限值為0!
迭代次數,終止條件都可以作為收斂引數使用!
正則項:
l1:特徵值更稀疏
l2:均值更均勻
正則化係數過小:無約束效力,「欠擬合」
正則化係數過大:約束過緊,「過擬合」
可以調控正則化係數與正則項來控制,「欠擬合」與「過擬合」
模型的複雜度:輸入特徵x的特徵數量!
感知機模型的收斂條件:資料集必須絕對線性可分!
感知機模型:只是考慮將資料分割開,並不考慮分割的有多好;這是與支援向量機最大的差別!
感知機模型的優點:簡單容易實現,作為神經網路與支援向量機的理論基礎!
感知機模型的缺點:資料集必須線性可分,適用於二分類問題!
求知鳥:資料分析|自程式設計實現k近鄰演算法
求知鳥:資料分析|自程式設計實現樸素貝葉斯
感知機自程式設計與sklearn實現
對於下面題目,分別用自程式設計和 sklearn 庫實現。已知訓練資料集d,其正例項點是x1 3,3 t,x2 4,3 t,負例項點是x3 1,1 t 1 用python 自程式設計實現感知機模型,對訓練資料集進行分類,並對比誤分類點選擇次序不同對最終結果的影響。可採用函式式程式設計或物件導向的程式...
感知機(Python實現,簡單)
usr bin python coding utf 8 importrandom fromnumpyimport importnumpyasnp deftraining train data1 3,3,1 4,3,1 正樣本 train data2 1,1,1 負樣本 train datas tra...
簡單感知機的實現
感知機演算法初步實現 import numpy as np 階躍函式 deff y return 1if y 0else 0def and x np.array 0,0 0,1 1,0 1,1 資料集 w np.array 0.038 0.044 c 0.042 閾值 a 0.015 學習速率a b...