背景
大學室友問我有沒有參加過kaggle,我說這是啥?(聽都沒聽過...)
他說他最近在做一個關于bosch(博世)的工業數據預測問題,問我有沒有興趣玩玩數據分析?
我一想,剛好最近也閑來無事,不如了解下...
前言
kaggle其實就是個數據分析/機器學習的比賽了,里面會有各種官方機構或者無聊之人,出各種題目,讓你做,然后弄個leaderboard(排行榜),第一名或者前幾名獲得最終獎金。 (國內有個類似的比賽叫 天池, 基本就是阿里淘寶每年雙十一的用戶購買欲預測或者商品推薦算法等)
所以,要參加kaggle,就需要:
- 進入官網,注冊個kaggle的用戶,所以請點擊這里
- 然后選擇個比賽,比如如下:
Santander Product Recommendation
屏幕快照 2016-11-14 下午12.50.32.png - 下載數據
點此下載recommendation的數據
屏幕快照 2016-11-14 下午12.52.05.png - 分析數據
...
這里就是你進行各種數據分析,訓練,建模,算法研究等的過程,下面會詳細講具體怎么玩.
... -
完成+提交
5.1 完成
完成后將我們的預測數據生成sample_submission.csv里給的格式的數據(感覺是:官方準備了答案模板,你照著涂滿就好)。
5.2 提交
提交前,首先要按流程,點擊統一他們的規則條款(如下):
屏幕快照 2016-11-14 下午1.00.45.png
然后進入提交頁面,提交就可以了.
- 提交后看一下你leaderboard的排名,如果排名太靠后,那就修改模型,調參數,優化算法.
以上,kaggle之旅結束
所以,參加kaggle很簡單,看著步驟來就可以了,無非麻煩的是題目是全英文的,如果理解有偏差,可能出現方向偏離的情況,不過一部分場景,他們會把題目驗證的算法或者數學公式都會列出來。
真正麻煩的是當你把幾十M的數據下載下來的時候,怎么處理才是關鍵,繼續往下走...
機器學習
本人啥也不懂,以下內容就是胡扯。如有錯誤或不當之處,望指點糾正,多謝多謝.
1. 前言
1.1 從kaggle引入
我們拿到kaggle下載下來的數據會發現分為2類,test數據和train數據. 機器學習其實就是給你一堆train數據,你先用這些數據進行分析,然后用你分析出的結果在test上數據上跑一圈,進行驗證或是分析預測。
具體怎么分析,就需要用到機器學習的知識和技能。
1.2 機器學習的簡單定義
有個大牛,叫Tom Mitchell,他定義了machine learning就是:E-T-P.
E(experience): 就是之前的經驗(相當于train data)
T(task): 就是基于各種算法的訓練過程
P(probability): 就是對將來概率的預測
而且這是一個循環,首先基于experience進行算法分析和預測,然后用數據跑task,如果跑出來的結果和預期probability相符,則會繼續提升自身的experience,然后繼續...
"A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E."
2. 機器學習包含哪些東西
2.1 監督學習和無監督學習
大的來說,就是監督學習(Supervised Learning)和無監督學習(UnSupervised Learning)
這個很簡單了,就是好比給你一套試題讓你去做,然后同時再給你一套歷年真題,但是一個人給你的真題帶了參考答案(Supervised Learning),一個不帶參考答案(UnSupervised Learning)。
監督學習比較簡單,誰都懂,我就不詳說了.
無監督學習,對于初學者,可能有些場景,會和監督學習有些混淆,所以稍微舉幾個例子:
- 比如天體星空的分析
- 一個大party中的聲音分析
- 某個東西的分類(市場的分類,郵件的分類,網站的分類-google搜索)都屬于 '無監督學習'
- 給個東西(比如任意的一個網頁),自動的去判斷屬性(比如技術類/文藝類/限制類), 也屬于 '無監督學習'
我自己在學習的過程中,發現有些場景,的確,如果背景交代不清晰的話,很可能判斷錯誤將無監督學習認為是監督學習。所以專門把無監督的舉例說明了下。
另外,機器學習還有半監督學習和增強學習,也不有著不同的應用和研究,這里就暫不細說啦。
2.2 監督學習(回歸和分類)
監督學習的解決方案分為:回歸和分類
回歸就是輸出是連續值(或者你理解成是隨機值,需要我們去預測)
分類就是輸出是離散值(基本常見的就是非A即B,非B即C...非Y即Z)
2.2.1 回歸
大家張口閉口的“線性回歸”是啥意思,其實意思就是,把坐標軸上的點連成線,然后調整一下,湊成一條差不多的直線(y=ax+b),然后用這條直線表示對這些點,這就是線性回歸。
(是不是有人會順然想到:曲線回歸、折線回歸、水平線回歸、馬甲線回歸、人魚線回歸...哈哈,送你們一句話:'這么想,節奏就對了啊'...)
2.2.1.1 單參數線性回歸(一元線性回歸)
2.2.1.1.1 引入
小時候學解方程都是都'一元一次方程'學起來的,線性回歸,自然也先從最簡單的一元線性回歸(單參數線性回歸)講起來.
先準備個基礎知識:
給你個拋物線(開口向上的那種,a>0),如何就最小值?
...
這個很簡單,大家都會:求導,斜率為0的點就是最小值。
2.2.1.1.2 梯度下降法
接上,同樣的道理,如果這不是個拋物線,我們擴展到三維空間,作為曲面,如何求最小值?
...
哈哈,答案其實是一樣的,還是求導,找出斜率為0的值,但具體的操作比較復雜,這里也不叫求導,叫求偏導,斜率也不是一口氣可以算出來的,我們的先人總結了個好方法叫“梯度下降法”(隨便找個點,然后像坐滑梯一樣,逐個試值,知道試出來最小的點)
懂得人,你們跳過這個環節就可以了。不懂得人,你們就記住一個公式:
x := x - af'(x)
//:= 表示復制, a是系數(江湖上稱之為‘步長’), f'(x) 表示f(x)求導
知道這個公式之后,我們就可以求最小值了。其實過程很簡單,就是,我們取個初始值,比如x = 5,然后一路求下去,直到f(x) 不再改變(別想太多,就是大概其,比如改變量小于0.00000...1什么的),算出來的就是最小值。當然這樣的取值不能保證是最優值,所以常見的算法是會多取幾個隨機值,各自進行梯度算法,最后所有的值里面求最優解。
2.2.1.1.3 理論公式
以上這個是講的最基本的原理,
真正要學習單參數線性回歸看如下2個公式:
這2個公式是什么鬼?
a> 左邊的就是剛才所講的梯度算法中求解用的公式
-
其中α稱作學習率(Learning Rate):
α過小,收斂太慢,我們做起來效率低;
α過大,可能出現找不到最小值的情況(有道是:"步子太大,容易xxx") - 初始點不同,每次找到的結果可能不一樣,所以這樣的結果稱之為局部最低點,我們的目標是尋找全局最低點。所以通過嘗試不同的初始值在交叉尋找,最終從結果中力求找到全局最低點。
b> 右邊的是單參數線性回歸的模型
- 第一個h(x)=... 是假設函數
- 第二個J(θ0,θ1)=... 是代價函數
- h(x)是理論值,y是實際測試值,正是因為理論值與實際值有出入,才需要我們去尋找最優解。如果h(x)和y永遠相等,上圖的曲面就是個平面---沒有最低點(或者說:全世界都是最低點)---J(θ0,θ1)恒等于0 .
2.2.1.1.4 開始做題
現在我們重新用數學的角度來明確我們的問題需求:
從應用的角度來看這個東西就是:
給你一坨數據,讓你給出他們的線性方程
從數學角度翻譯過來就是:
就是已知x,y的生產數據值,求 θ0和θ1使得J(θ0,θ1)最小.
怎么解?
原始數據類似如下這樣(數據來源:coursera的machine learning課程習題,上過課的都做過)
讓我們分析x和y的關系,基于之前的理論,我們假設
// θ0:回歸常數; θ1:回歸系數
h(θ) = θ0 + θ1x
現在要求出θ0和θ1,怎么求出來?
如下幾個辦法:
- 把這些數據在坐標軸上畫出來,然后看著畫一條直線,然后量出來
θ0和θ1,然后交卷。 - 根據公式寫代碼,根據下面這個公式,寫出求θ的算法,分別求出θ0和θ1
備注:這兩個公式是根據代價函數推倒出來的,推導過程點這里
屏幕快照 2016-11-15 下午3.50.13.png - 徒手算
這個也是最實用的方法了。解線性方程的最簡單方法是最小二乘法(這是啥&&為啥用它),公式如下:
(對應b就是θ1, a就是θ0)
屏幕快照 2016-11-15 下午3.52.04.png
用這個公式代入就可以了(建議大家自己多操練幾遍,會加深印象和對公式的理解,當然對于徒手能力一般的童鞋可以偷個懶)
想深入了解這塊的童鞋,可以看這個
浙大美女的詳解筆記:單參數線性回歸 Linear Regression with one variable
2.2.1.2 多參數線性回歸(多元線性回歸)
回顧:
里面的原理懂了,一維換到多維只是數據多了個n或者多了個“點點點”的感覺(類似:1,2,... , n),反正從小到大的數學只是大抵如此。
還記得我們一元的公式吧:
正文:
假設已經經過了一系列的推導和一系列"引導式教學"之后,我們現在直奔主題,看一下多參數線性回歸公式.
-
預測函數:
-
代價函數:
-
我們最終要求的θ怎么求呢?
擴展:
這里面的很多計算,實際中需要用到矩陣的知識進行運算,所以每個公式都對應有矩陣的表達式和計算過程:
-
關于θ:
-
關于J(θ):
這里有詳細的推導過程,建議大家點進去看一下. 我只會寫一寫關鍵節點或者重要公式,作為一個記錄(方便以后回爐時能快速找到),真正如何一步步走到這里來的,還是需要去看公開課或者自己手動去推算一下,否則后續的路會寸步難行啊...
</br>
一個iOS開發者的業余生活:machine learning之旅
by polen