統計學習筆記 手撕「感知機」

2021-10-03 23:54:49 字數 3947 閱讀 4725

算例實現

小結參考

輕鬆一刻

感知機主要的功能就是把乙個資料集進行二分類,例如輸入人的身高體重,感知機可以判斷該人是否肥胖,是機器學習中相對簡單的乙個模型。開始正文前,我們先約定好符號:

模型的大致實現流程為:

輸入乙個訓練集t;

定義權重向量w、與偏置b;

利用線性分類函式f(x)對資料進行分類;

想要實現這個過程,我們首先需要乙個可以完成分類的線性分類函式,那麼我們應該怎麼定義乙個函式幫助我們對資料進行乙個正確的分類呢?在此我們又引入了上圖所定義的誤差函式,如果誤差函式(誤分類點到分介面的距離*||w||)的和為零,就說明線性分類函式非f(x)將訓練集t中的資料的分類全部是正確的。感知機演算法做的就是求出誤差函式(損失函式)最小時對應的w、b。

本文對演算法的推導過程、與演算法的迭代次數的數學證明不做詳細的敘述,筆者有興趣的話可自行翻閱原書p42。

1.迭代次數收斂;

2.解(w、b)不唯一,與初始值和訓練資料的輸入的先後順序有關;

3.是基於隨機梯度下降法的優化演算法,策略為對損失函式l(w,b)進行最小化;

注:算例的資料集為sklearn庫中自帶的iris(鶯尾花)資料。實現工具為jupyter notebook

筆者利用iris資料集給出的兩類鶯尾花的花萼長度(sepal length)、花萼寬度(sepal width),通過感知機演算法,完成線性分類的函式的建立。

import pandas as pd

import numpy as np

from sklearn.datasets import load_iris

import matplotlib.pyplot as plt

#鶯尾花資料匯入

iris=load_iris(

)df=pd.dataframe(iris.data,columns=iris.feature_names)

df['label'

]=iris.target

df.columns=

['sepal length'

,'sepal width'

,'petal length'

,'petal width'

,'label'

]df.head(

)

實現結果:

)輸出:

)# 資料線性可分,二分類資料

# 此處為一元一次線性方程

class

model

:def

__init__

(self)

: self.w = np.ones(

len(data[0]

)-1, dtype=np.float32)

self.b =

0 self.l_rate =

0.1# self.data = data

defsign

(self, x, w, b)

: y = np.dot(x, w)

+ b return y

# 隨機梯度下降法

deffit

(self, x_train, y_train)

: is_wrong =

false

while

not is_wrong:

wrong_count =

0for d in

range

(len

(x_train)):

x = x_train[d]

y = y_train[d]

if y * self.sign(x, self.w, self.b)

<=0:

self.w = self.w + self.l_rate * np.dot(y, x)

self.b = self.b + self.l_rate * y

wrong_count +=

1if wrong_count ==0:

is_wrong =

true

return

'perceptron model!'

defscore

(self)

:pass

perceptron = model(

)perceptron.fit(x, y)

x_points = np.linspace(4,

7,10)

y_ =

-(perceptron.w[0]

* x_points + perceptron.b)

/ perceptron.w[1]

plt.plot(x_points, y_)

plt.plot(data[:50

,0], data[:50

,1],

'bo'

, color=

'blue'

, label=

'0')

plt.plot(data[50:

100,0]

, data[50:

100,1]

,'bo'

, color=

'orange'

, label=

'1')

plt.xlabel(

'sepal length'

)plt.ylabel(

'sepal width'

)plt.legend(

)輸出:

對於機器學習演算法的學習,筆者嘗試的是啃書+復現,但是深感其中數學的深奧,將原始碼理解是容易的,數學入門也算簡單,但是對於其背後支撐演算法的數學證明、數學定義筆者仍未能吃透,上述不足之處,望多多指正。

李航 《統計學習方法》(第二版)p36-47

考研男:做我女朋友好不好?

考研女:e^x在無窮大處的極限是多少你知道麼?知道我就接受你;

考研男:簡單!0或正無窮;

考研女:對不起我拒絕你的表白,因為極限具有唯一性,而你不具有……

統計學習 感知機篇

感知機是二分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1和 1值,感知機學習旨在求出將訓練資料進行線性劃分的分離超平面,是神經網路和支援向量機的基礎。f x si gn w x b f x sign w x b f x s ign w x b 其中,x xx是樣本點,w ww是...

統計學習方法筆記 感知機

感知機是二類分類的線性模型,其輸入為例項的特徵向量,輸出為例項的類別,取 1和 1二值,屬於判別模型。分為原始形式和對偶形式。是神經網路與支援向量機的基礎。由輸入空間到輸出空間的如下函式 f x sign w x b 稱為感知機.其中,w和b為感知機模型引數,sign是符號函式,即 感知機模型的假設...

李航統計學 學習筆記 感知機

感知機模型 定義 感知機 假設輸入空間 特徵空間 是 感知機模型的假設空間是定義在特徵空間中的所有線性分類模型或線性分類器,即函式集合 class mathcode src 感知機的幾何解釋 線性方程 感知機學習就是求得模型引數w,b感知機 通過學習得到的感知機模型,對於新的輸入例項給出其對應的輸出...