Python 用5行代碼學(xué)機(jī)器學(xué)習(xí)—線性回歸
我準(zhǔn)備使用scikit-learn給大家介紹一些模型的基礎(chǔ)知識(shí),今天就來講講線性回歸模型。
1. 準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上噢,如果沒有,請(qǐng)?jiān)L問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda
Windows環(huán)境下打開Cmd(開始—運(yùn)行—CMD),蘋果系統(tǒng)環(huán)境下請(qǐng)打開Terminal(command+空格輸入Terminal),準(zhǔn)備開始輸入命令安裝依賴。
當(dāng)然,我更推薦大家用VSCode編輯器,把本文代碼Copy下來,在編輯器下方的終端運(yùn)行命令安裝依賴模塊,多舒服的一件事?。篜ython 編程的最好搭檔—VSCode 詳細(xì)指南。
在終端輸入以下命令安裝我們所需要的依賴模塊:
- pip install scikit-learn
2.簡(jiǎn)單的訓(xùn)練集
冬天快到了,深圳這幾天已經(jīng)準(zhǔn)備開始入冬了。
從生活入手,外界溫度對(duì)是否穿外套的影響是具有線性關(guān)系的:
現(xiàn)在,考慮這樣的一個(gè)問題:如果深圳的溫度是12度,我們應(yīng)不應(yīng)該穿外套?
這個(gè)問題很簡(jiǎn)單,上述簡(jiǎn)單的訓(xùn)練集中,我們甚至不需要機(jī)器學(xué)習(xí)就能輕易地得到答案:應(yīng)該。但如果訓(xùn)練集變得稍顯復(fù)雜一些呢:
你能看出其中x1, x2, x3和y之間的規(guī)律嗎?
比較難,但是如果你有足夠的數(shù)據(jù)(比如100個(gè)),機(jī)器學(xué)習(xí)能夠迅速解決這個(gè)問題。
為了方便展示機(jī)器學(xué)習(xí)的威力,我們?cè)谶@里生產(chǎn)100個(gè)這樣的訓(xùn)練集(公式為: y=x1 + 2*x2 + 3*x3):
- from random import randint
- TRAIN_SET_LIMIT = 1000
- TRAIN_SET_COUNT = 100
- TRAIN_INPUT = list()
- TRAIN_OUTPUT = list()
- for i in range(TRAIN_SET_COUNT):
- a = randint(0, TRAIN_SET_LIMIT)
- b = randint(0, TRAIN_SET_LIMIT)
- c = randint(0, TRAIN_SET_LIMIT)
- op = a + (2*b) + (3*c)
- TRAIN_INPUT.append([a, b, c])
- TRAIN_OUTPUT.append(op)
然后讓線性回歸模型使用該訓(xùn)練集(Training Set)進(jìn)行訓(xùn)練(fit),然后再給定三個(gè)參數(shù)(Test Data),進(jìn)行預(yù)測(cè)(predict),讓它得到y(tǒng)值(Prediction),如下圖所示。
3. 訓(xùn)練和測(cè)試
為什么我使用sklearn?因?yàn)樗娴恼娴暮芊奖?。像這樣的訓(xùn)練行為,你只需要3行代碼就能搞定:
- from sklearn.linear_model import LinearRegression
- predictor = LinearRegression(n_jobs=-1)
- predictor.fit(X=TRAIN_INPUT, y=TRAIN_OUTPUT)
需要注意線性回歸模型(LinearRegression)的參數(shù):
n_jobs:默認(rèn)為1,表示使用CPU的個(gè)數(shù)。當(dāng)-1時(shí),代表使用全部CPU
predictor.fit 即訓(xùn)練模型,X是我們?cè)谏捎?xùn)練集時(shí)的TRAIN_INPUT,Y即TRAIN_OUTPUT.
訓(xùn)練完就可以立即進(jìn)行測(cè)試了,調(diào)用predict函數(shù)即可:
- X_TEST = [[10, 20, 30]]
- outcome = predictor.predict(X=X_TEST)
- coefficients = predictor.coef_
- print('Outcome : {}\nCoefficients : {}'.format(outcome, coefficients))
這里的 coefficients 是指系數(shù),即x1, x2, x3.
得到的結(jié)果如下:
- Outcome : [ 140.]
- Coefficients : [ 1. 2. 3.]
驗(yàn)證一下:10 + 20*2 + 30*3 = 140 完全正確。
如何,機(jī)器學(xué)習(xí)模型,用起來其實(shí)真的沒你想象中的那么難,大部分人很可能只是卡在了安裝 scikit-learn 的路上...
順便給大家留個(gè)小練習(xí),將下列歐式距離,使用線性回歸模型進(jìn)行表示。
解決思路和本文的方案其實(shí)是類似的,只不過需要變通一下。