實現簡單感知機 資料分析 自程式設計實現感知機模型

2021-10-14 16:54:27 字數 2804 閱讀 2689

本不打算寫感知機模型,因為其實在太簡單,在實際業務中也很少用到!

可後來接觸越來越多的演算法,發現感知機模型才是最為簡接概述分類模型三要素:

模型,策略,演算法!

想來,李航博士將其作為《統計學習方法》分類模型第一章,大概就是出於這個原因!

從這段話中,可以抽象出分類模型三要素:

感知機模型的假設空間分離超平面

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...