(每天一點點)統計學習方法 感知機

2021-10-06 19:36:28 字數 2777 閱讀 9490

感知機是二類分類的線性分類模型,其輸入為例項的特徵向量,輸出為例項的類別,取+1、-1二值。感知機對應輸入空間中將例項劃分為正負兩類的分離超平面,屬於判別模型。

2.1函式表達

由輸入空間到輸出空間的如下函式:

稱為感知機。w是權值,sign()是符號函式,其中的變數是w和x的內積。

2.2幾何意義

w是超平面的法向量,b是超平面的截距。這個超平面將特徵空間劃分為兩個部分。位於兩部分的點分別稱為正負兩類。

由數學知識可得輸入空間rn其中一點到超平面的距離

這裡||w||是w的l2範數

l2範數的計算公式如下:

對於錯誤分類的資料,y與w·x+b的正負相反,有y(w·x+b)<0,所以錯誤分類點到超平面的距離為

所有誤分類點的距離綜合相加且不考慮w就是該模型的損失函式。

即感知機sign(w`x+b)的損失函式定義為

接下來就是最小化損失函式。

用隨機梯度下降法迭代,來求min l(w,b):

※※輸入:t= 其中xi∈rn,yi∈

※※輸出:w,b

對l(w,b)的w、b分別求導,隨機選取乙個誤分類點,可以對w、b進行更新。

其中a是步長。意思就是每次下降多少梯度。

這種演算法的直觀解釋:當乙個例項點被誤分類的時候,調整引數的值,使分離超平面向該誤分類點一側移動來減少誤分類點與超平面的距離,直到超平面越過該分類點使之正確分類。

對偶形式基本想法是:將w和b表示為例項x和例項有的線性組合,通過求解係數而求解w和b。

因為由原始演算法我們可以知道,假設一共修改了n次,那麼w,b關於(xi,yi)的增量分別是aiyixi和aiyi。其中ai=ni a(步長)

※※解釋:對於(xi,yi)這個點,可能要下降ni次才能使它正確分類。每次下降步長是上面普通演算法中的a。那麼,我們就可以用aiyixi的和來表示w。即所有點走的步長

初始化a=0,b=0

也就是說,對偶形式中訓練例項只以內積的形式出現。

定理表明,誤分類的次數k是由上界的,就是說經過有限次搜尋可以找到將訓練資料完全正確分開的分離超平面。即當訓練資料線性可分的時候,感知及學習演算法原始、對偶形式迭代都是收斂的。

class

model

:#初始化w,b和學習率

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

#定義sign函式

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

sklearn例項:

import sklearn

from sklearn.linear_model import perceptron

clf = perceptron(fit_intercept=

true

, max_iter=

1000

, shuffle=

true

)clf.fit(x, y)

#輸出權值w

print

(clf.coef_)

#輸出係數b

print

(clf.intercept_)

每天一點點 thread process

wince的培訓課程已入正題,今天講述的是 thread process。首先,提到乙個重要概念 堆疊。這是由兩個單詞組成的概念,即heap stack。在這一點上,我不是很明白,以前沒有接觸過。後面,一篇網上的說明,比較經典,值得學習。其次,在wince執行機制中,thread process是個...

每天學習一點點02

今天了解了用pyecharts繪製 方法很簡單,如下 from pyecharts.components import table from pyecharts.options import componenttitleopts tabel table headers 列表資料 也可以是datafr...

每天學習一點點04

今天聽了一本很多年前就想看的書,但是一直沒有去看,書名叫 定位 主要講的是各種企業之間的競爭,全書均運用了戰爭的理論,主要分為4種 競爭方法 1,防禦戰 行業領導者運用 2,進攻戰 行業第二名運用 3,側翼戰 行業中與領導者差異巨大者運用 4,游擊戰 行業中追求小而美者或者行業新手運用 防禦戰例 行...