1. 程式人生 > >利用線性函式實現鳶尾花資料集分類

利用線性函式實現鳶尾花資料集分類

在空間中,我們定義分類的線性函式為:g(x)=wTx+bg(x)=w^{T}x+b
其中樣本x=(x1,x2,...,xl)Tx=(x_{1},x_{2},...,x_{l})^{T},權向量w=(w1,w2,...,wl)Tw=(w_{1},w_{2},...,w_{l})^{T},偏移量是bb
在這裡插入圖片描述
上圖展示了權向量和樣本的關係,由公式:cos<w,xi>=wxiwxi\cos{<w,x_{i}>}=\frac{w \cdot x_{i}}{\left \| w \right \|\left \| x_{i}\right \|}


可得到xix_{i}ww方向上投影為:cos<w,xi>xi=wxiw\cos{<w,x_{i}>\left \| x_{i}\right \|}=\frac{w \cdot x_{i}}{\left \| w \right \|}
分類的超平面(hyperplane)方程為g(x)=wTx+b=0g(x)=\bm{w}^{T}\bm{x}+b=0
此時所有在超平面上的樣本到w
w
方向上的投影長度為:wTxw=w0w\frac{|\bm{w}^{T}\bm{x}|}{||\bm{w}||}=\frac{|-\bm{w}_{0}| }{\left \| \bm{w} \right \|}
在這裡插入圖片描述
因為投影是垂直的,所以超平面與權向量ww垂直。
推導樣本到超平面的距離:
在這裡插入圖片描述
取任意一點超平面右側的x\bm{x}xp\bm{x}_{p}x\bm{x}在超平面上的投影,zz為投影:
wTxp+b=0z=wT(xxp)w=wTx+bw\bm{w^{T}x_{p}}+b=0\\ z=\frac{\bm{w}^{T}(x-x_{p})}{||\bm{w}||}=\frac{\bm{w}^{T}\bm{x}+b}{||\bm{w}||}

同理,設x\bm{x}在超平面左側,xp\bm{x}_{p}x\bm{x}在超平面上的投影,zz為投影:
z=wT(xpx)w=(wTx+b)wz=\frac{\bm{w}^{T}(x_{p}-x)}{||\bm{w}||}=\frac{-(\bm{w}^{T}\bm{x}+b)}{||\bm{w}||}
x\bm{x}到超平面的距離為:z=±(wTx+b)w=g(x)w|z|=\frac{|\pm(\bm{w}^{T}x+b)|}{||\bm{w}||}=\frac{|g(\bm{x})|}{||\bm{w}||}
g(x)=wTx+b=wzg(\bm{x})=\bm{w}^{T}\bm{x}+b=||\bm{w}||z
線性分類函式g(x)g(x)刻畫了樣本與超平面之間的距離。

從鳶尾花資料集中挑選山鳶尾(iris-Setosa)和變色鳶尾(iris-Versicolor) 兩種花的資訊作為測試資料。出於視覺化的原因,只考慮資料集中萼片長度(sepla length)和花瓣長度(petal length)這兩個特徵。

import pandas as pd
df = pd.read_csv(r'http://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data')
df.tail()
5.1 3.5 1.4 0.2 Iris-setosa
144 6.7 3.0 5.2 2.3 Iris-virginica
145 6.3 2.5 5.0 1.9 Iris-virginica
146 6.5 3.0 5.2 2.0 Iris-virginica
147 6.2 3.4 5.4 2.3 Iris-virginica
148 5.9 3.0 5.1 1.8 Iris-virginica
y = df.iloc[0:99, 4].values
y
import numpy as np
import matplotlib.pyplot as plt
y = np.where(y == 'Iris-setosa', -1, 1)
x = df.iloc[0: 99, [0, 2]].values
plt.scatter(x[:49, 0], x[:49, 1], color='red', marker='o', label='setosa')
plt.scatter(x[49:99, 0], x[49: 99, 1], color='blue', marker='x', label='versicolor')
plt.xlabel('petal length')
plt.ylabel('sepal length')
plt.legend(loc='upper left')
plt.show()

這裡寫圖片描述

這裡需要定義出一條線性迴歸線用於分類,需要再圖中定義分類的線性函式:
權值向量為w=[w0w1w2]w= \begin{bmatrix} w_{0}\\ w_{1}\\ w_{2} \end{bmatrix},x=[1x1x2]x= \begin{bmatrix} 1\\ x_{1}\\ x_{2} \end{bmatrix} z=w0+x1w1+x2w2=wTxz=w_{0}+x_{1}w_{1}+x_{2}w_{2}=w^{T}x
標籤判定函式:
ϕ(z)={1,z01,z<0\phi (z)=\left\{\begin{matrix} 1, z\geq 0 \\ -1, z<0 \end{matrix}\right.

誤差函式:
J(w)=12ni(yizi)2J(w)=\frac{1}{2n}\sum_{i}(y^{i}-z^{i})^{2}
求解偏導數:
J(w)wj=12n