一入ml深似海啊…
這裡主要是《神經網路與機器學習》(neural networks and learning machines,以下簡稱《神機》)的筆記,以及一些周志華的《機器學習》的內容,可能夾雜有自己的吐槽,以及自己用r語言隨便擼的實現。
話說這個《神經網路與機器學習》還真是奇書,不知是作者風格還是翻譯問題,一眼望去看不到幾句人話(也許是水利狗看不懂),感覺我就是純買來自虐的。
作為開始當然是最古老的機器學習演算法之一,神經網路的板磚感知機,對應《神機》的第一章。
因為是rosenblatt提出的模型所以就加上了他名字作為字首。這是乙個有監督學習,也就是不僅給出自變數還要給出結果值讓機器自個擬合的模型,而且是乙個二分類模型。再說清楚一點,這玩意只能分線性可分的樣本,也就是對於二維的資料,它只能搞一條直線把樣本分開,對於三維的資料,只能搞個平面把樣本分開。
所以像居然連異或運算都不能弄之類的對它的吐槽歷來不少。
感知機由乙個線性組合器(說白了就是把一系列輸入值加權求和)以及乙個硬限幅器(說白了就是拿前面的求和取符號)組成。具體樣子參考下圖(來自《神機》):
我們將一組輸入值記為x1
,x2,
...,
xm,相應的權值記為w1
,w2,
w3..
.wm ,另外還要有個偏置值
b (相當於線性回歸裡邊的截距)。把這些輸入到感知機裡邊進行加權求和: v=
∑i=1
mwix
i+b加權和
v 稱為誘導區域性域。
然後對這個
v取符號,也就是大於0取1,小於0取-1,就這樣決定這組輸入值歸為哪類: y=
sign
(v)
y=}#生成上半月牙
while(i < n)
}#生成下半月牙
# 沒什麼特別的,就是拿來打亂資料順序
rndodr = order(runif(n))
x1=x1[rndodr]
x2=x2[rndodr]
d=d[rndodr]
qplot(x1,x2,color=factor(d))#視覺化
# 生成矩陣形式的資料集
dat = as.matrix(data.frame(x1,x2))其中x1和x2分別是樣本點的橫縱座標,d為樣本點的歸類。
視覺化之後如下:
然後就是定義感知機和訓練。根據《神機》分類誤差用均方差表示。
# 感知機,輸入為乙個長度2的向量。
perceptron = function(x) sign(t(w) %*% c(x,+1))
# 之所以將偏置項+1放到最後面是因為r是從1開始索引的而不是0...
w=c(0,0,0) # 初始化權值
n=50
#迭代次數
eta = seq(1e-1,1e-5,length.out = n)#學習率引數eta設為從1e-1到1e-5的線性退火
mse = c()#記錄每次迭代後的均方差
# 訓練
for(j in
1:n)# 丟入資料集中的每乙個資料進行訓練
# 迭代完一次就對資料集進行分類然後計算均方差
mse = sqrt(sum(e*e)/n)
}
訓練完輸出結果:
# 繪製均方差隨迭代次數的變化曲線
qplot(x=c(1:n),y=mse,geom = 'line')
# 繪製直觀的樣本劃分情況
qplot(x1,x2,color=factor(y)) + geom_abline(intercept = -w[3]/w[2], slope = -w[1]/w[2])
# 統計誤識別率
length(e[e!=0])/n
然後這是訓練完的分類結果。
可見感知機很輕易的就把倆月牙完好得分開了。
再看均方根誤差的變化曲線,可以看到第一輪迭代就已經收斂。
之後再試試倆月牙的距離為0的情況。這時倆月牙情況如下:
經過50輪迭代之後也順利收斂,誤識別率依然為0(因為隨機生成點的關係不太可能有幾個點同時在邊界上)。
可以看到大概是在第20輪迭代之後收斂的。
再接下來就試試月牙間距離為-4的情況。這時候倆月牙已經不是線性可分了,看看感知機會如何整?
迭代完發現雖然不能做到但是感知機還是盡力地讓倆月牙的點盡量分開了,於是成了這個樣子。
均方根誤差是醬紫抖動的。
再看看誤識別率:
> length(e[e!=0])/n
[1] 0.0945
有9.45%的樣本被錯誤分類了。
順便附上月牙距離分別為0和-4時感知機訓練過程的**:
這裡是距離為0的:
win10下機器學習TensorFlow搭建
之前在網上查詢了很多資料,試了無數次,尤其是anaconda,反覆安裝刪除了無數次。昨天忙活了一天,安裝失敗,今天終於成功。特此記錄。安裝好後,在pycharm ide下也可以順利執行了。下面的是在自己電腦上的測試 標籤 windows cuda python 深度學習 分類 機器學習 主要步驟 首...
哈哈機械人送到冰雪小鎮 感受了一下機械人送餐服務
應該說,很好玩的,因為要錄頻,也沒和他拍照,然後他就頭也不回的走了,哈哈!這也不算是第一次享受機械人的服務了,有一回和學生吃午飯時,記得是在西貝莜面村,餐廳就穿梭著機械人在往各桌送菜,當然,最後還是要由服務員端到桌上,也可以顧客自己動手。由於這些送餐的機械人的存在,餐廳的氛圍就顯得不太一樣啦。但還是...
MYSQL學習筆記 抖動一下
有時在正常情況下,工作的很好的sql語句,突然就變慢了一下。mysql發生了抖動,這是什麼原因?首先從mysql的wal機制說起。innodb在處理更新語句的時候,只是寫了一次redo log就返回了。那麼就會產生 脹頁 當記憶體資料頁跟磁碟資料頁內容不一致的時候,我們稱這個記憶體頁為 髒頁 記憶體...