利用線性函式實現鳶尾花資料集分類
阿新 • • 發佈:2019-02-11
在空間中,我們定義分類的線性函式為:
其中樣本,權向量,偏移量是。
上圖展示了權向量和樣本的關係,由公式:
可得到到方向上投影為:
分類的超平面(hyperplane)方程為
此時所有在超平面上的樣本到方向上的投影長度為:
因為投影是垂直的,所以超平面與權向量垂直。
推導樣本到超平面的距離:
取任意一點超平面右側的,為在超平面上的投影,為投影:
同理,設在超平面左側,為在超平面上的投影,為投影:
到超平面的距離為:
線性分類函式刻畫了樣本與超平面之間的距離。
從鳶尾花資料集中挑選山鳶尾(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()
這裡需要定義出一條線性迴歸線用於分類,需要再圖中定義分類的線性函式:
權值向量為,
標籤判定函式:
誤差函式:
求解偏導數: