中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
感知機的暴力實現

下面是機器學習的《監(jiān)督式學習》課程的一篇試讀文章,進行了一下重新排版,然后展示在這里。由于格式的限制,缺少了一些習題、可運行的代碼、證明、注釋等,可能會導致解釋差強人意,所以介意的同學可以直接訪問感知機的暴力實現,以獲得最佳的閱讀體驗。

1 尋找合適的
 和 
 
單來說,感知機就是要找到一條直線(或者說超平面),將兩類點分開(下圖中的
 為橫坐標,
 為縱坐標):

我們知道,直線(或者超平面)的方程為(下面的

 ):

本文就來介紹感知機如何通過一種看似暴力的方法來尋找合適的 

  
 
,從而找到將兩類點分開的直線(或者超平面)。


2 前置結論
首先我們要知道一些前置的結論,下面一一來介紹。

2.1 點積的正負與夾角的大小

根據點積的知識,可以知道點積的正負與夾角的大小如下:

2.2 法向量

對于n維空間中的超平面
 
而言,總是其法向量,即:

比如二維空間中,

 是一條直線, 
 
就垂直于該直線:

同樣的道理,在三維空間中

 是一個平面, 
 
是該平面的法向量:

2.3 超平面的兩側

n維空間中的向量
 
與超平面 
 
的關系為:
  •  :在超平面的法向量 
     
    所指的一側

  •  :在超平面上 

  • 在超平面的法向量 
     
    所指的另外一側

比如二維空間中的直線

 周圍有三個向量:

根據上述結論可得:

  • 在直線的法向量 
     
    所指的一側

  • 在直線上

  • 在直線的法向量 
     
    所指的另外一側

三維空間也是一樣的,假設平面

 周圍有兩個向量:

根據上述結論可得:

  •  :在平面的法向量 
     
    所指的一側

  •  :在平面的法向量 
     
    所指的另外一側

3 對錯的判斷
了這么多前置,下面開始介紹感知機的暴力實現。第一個問題是,要能判斷找到的超平面  
  
的對錯。

3.1 隨便找的直線

下面是用來作例子的數據集,其中

 為某點的坐標,對應的
 
表示該點的類別:

然后隨便(對,就是隨便,要不怎么叫暴力實現)找一條直線 

 ,看看能不能將這些點分開(作圖時, y=+1 表示該點為 ·, y=-1 表示概率為 
 
):

3.2 是否分對

下面來判斷該直線的對錯。我們希望標簽 y=+1的特征向量在直線

 法向量
 
所指的一側,而 y=-1 的特征向量在法向量 
 
所指的另一側。據此,上圖中分對的點為
 
、
 、
 、
,根據上面“超平面的兩側”的介紹,可知它們是有共同特征的:

同理,分錯的點 

  
 
也是有共同特征的(分錯邊或者分到了邊界線上都算錯):

3.3 小結

綜上,判斷

 對錯的標準就是:

  • 分對:

  • 分錯:

如果所有的 

 都分對了,那么就說明
 
是正確的超平面。

4 錯誤的糾正
面看到 
 
、 
 
分錯了,所以超平面
 
是錯誤的,需要糾正。本節(jié)用兩個二維空間中例子來說明糾錯的思路,當然這些推論也是適用于n維空間。

4.1 拉近

比如下面是標簽  y=+1 的 

,它被錯分到了直線
 的法向量
 
所指另一側,或者說本來
 
 
的夾角
 
應該是銳角的,現在卻是鈍角:

那就想辦法將法向量拉近一些。根據向量加法的平行四邊形法則,可以看到

 就是和
 
夾角更小的向量:

所以用

 為法向量,直線方程被糾正為
,此時就可以正確分類
 

4.2 推遠

而下面是標簽 y=-1 

 被錯分了,我們希望將法向量推遠一點,同樣根據向量加法的平行四邊形法則,可以看到
 
就是和
 
夾角更大的向量:

所以用

 為法向量,直線方程被糾正為
 
,此時就可以正確分類
 


4.3 小結

總結下,當標簽為

 的
 
被錯分時,也就有

此時,只需要令 

 ,就可以得到修正后的 
 

下面給一個例子來進一步說明該結論。

4.4 錯誤糾正的例子

  如下圖所示:

標簽為 y=-1 的向量

分錯了嗎?如果分錯又如何糾正?

  通過看圖,或者進行計算(該直線的法向量為

),都可以發(fā)現分錯了:

應該將法向量 

 推遠一點,修正后為:

修正后的直線為 

 ,從夾角來看,修正后的法向量 
 
更遠了:


5 找到決策邊界
好了,現在具備需要的知識了,讓我們來為 
 
、 
 
糾錯。按順序來吧。

5.1 

的糾錯

只需要

就可以得到新的超平面:

糾錯后,

 對了。

5.2 持續(xù)糾錯

可是,原本沒有錯的

 卻錯了,令
 
進行糾錯;然后
 
又錯了,繼續(xù):

5.3 找到決策邊界

還有錯,還得繼續(xù):

最后,法向量為

 的直線
 
將所有的點正確分開,這就是感知機的暴力實現所要尋找的決策邊界。


6 算法規(guī)范化
才介紹的算法一開始隨機找了個超平面,實在太暴力了,下面來規(guī)范一下:

        (1)令權重向量 

 
 
都為0:

所以初始函數為:

        (2)順序遍歷數據集,從中得到 

。

        (3)如果分錯了,即

則進行更正(因為剛開始 

 ,不更正的話,超平面的截距就一直是0,導致的后果是有可能不能將數據分開):

        (4)轉至(2),直到找到合適的 

  
 
,使得
 
對于所有的  
 
都滿足:

此時可以說,該超平面 

 將數據分為了兩類。該規(guī)范做法的正確性在下一節(jié)課中會進行證明。

6.1 實現

語言描述的算法可能有歧義,下面是按照上面步驟實現的代碼,可以幫助同學們精確理解感知機的暴力實現:

import numpy as npimport matplotlib.pyplot as pltfrom sklearn.linear_model import Perceptronfrom matplotlib.colors import ListedColormap
# 初始化 w 和 b,np.array 相當于定義向量w, b = np.array([0, 0]), 0
# 定義 d(x) 函數def d(x): return np.dot(w,x)+b # np.dot 是向量的點積
# 歷史信用卡發(fā)行數據# 這里的數據集不能隨便修改,否則下面的暴力實現可能停不下來X = np.array([[5,2], [3,2], [2,7], [1,4], [6,1], [4,5]])y = np.array([-1, -1, 1, 1, -1, 1])
# 感知機的暴力實現is_modified = True # 記錄是否有分錯的點while is_modified: # 循環(huán),直到沒有分錯的點 is_modified = False
# 順序遍及數據集 X for xi, yi in zip(X, y): # 如果有分錯的 if yi*d(xi) <= 0: # 更新法向量 w 和 b w, b = w + yi*xi, b + yi is_modified = True break
# 下面是繪制的代碼,主要展示暴力實現的結果,看不懂也沒有關系def make_meshgrid(x, y, h=.02): '''Create a mesh of points to plot in
Parameters ---------- x: data to base x-axis meshgrid on y: data to base y-axis meshgrid on h: stepsize for meshgrid, optional
Returns ------- xx, yy : ndarray ''' x_min, x_max = x.min() - 1, x.max() + 1 y_min, y_max = y.min() - 1, y.max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) return xx, yy
def plot_contours(ax, clf, xx, yy, **params): '''Plot the decision boundaries for a classifier.
Parameters ---------- ax: matplotlib axes object clf: a classifier xx: meshgrid ndarray yy: meshgrid ndarray params: dictionary of params to pass to contourf, optional ''' Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) out = ax.contourf(xx, yy, Z, **params) return out
# 訓練 skrlearn 中的感知機,這里是為了借用該感知機的接口,便于繪制決策區(qū)域clf = Perceptron().fit(X, y)# 根據上面暴力實現得到的 w 和 b 來修改感知機clf.coef_[0][0], clf.coef_[0][1], clf.intercept_[0] = w[0], w[1], b
# 設置字體大小plt.rcParams.update({'font.size': 14})# 設置畫布和坐標系fig, ax = plt.subplots(figsize = (6, 3), nrows=1, ncols=1)fig.subplots_adjust(left=0.25, right=0.75, top=0.999, bottom=0.001)ax.set_xticks(()),ax.set_yticks(())
cm = ListedColormap(('blue', 'red'))markers = ('x', 'o')
# 決定繪制區(qū)域的大小X0, X1 = X[:, 0], X[:, 1]xx, yy = make_meshgrid(X0, X1)ax.set_xlim(xx.min(), xx.max())ax.set_ylim(yy.min(), yy.max())
# 繪制決策區(qū)域plot_contours(ax, clf, xx, yy, cmap=cm, alpha=0.4)
# 繪制決策直線lx = np.linspace(xx.min(), xx.max())ly = - w[0] / w[1] * lx - b / w[1]ax.plot(lx, ly, 'k-')
# 根據類別不同,繪制不同形狀的點vmin, vmax = min(y), max(y)for cl, m in zip(np.unique(y), markers): ax.scatter(x=X0[y==cl], y=X1[y==cl], c=y[y==cl], alpha=1, vmin = vmin, vmax = vmax, cmap=cm, edgecolors='k', marker = m)
plt.show()

我們通過通俗易懂、圖形化的方式,對機器學習中的《監(jiān)督式學習》進行了精講,目前還在連載中,可以享受早鳥價格,可以點擊下面的鏈接購買:

?? 也可以買機器學習的前置課程,《線性代數》、《單變量微積分》、《多變量微積分》、《概率論與數理統計》

 


ID matongxue314

本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
使用支持向量機SVM進行分類
ML之SVM:基于sklearn的svm算法實現對支持向量的數據進行標注
「周末AI課堂」非參模型初步(代碼篇)機器學習你會遇到的“坑”
直線、曲線、平面、曲面的相交問題
Matlab中插值函數匯總和使用說明
KNN算法的python實現--基于scikit_learn
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服