第乙個機器學習樣例《python與機器學習實戰》

2021-09-21 19:39:54 字數 2011 閱讀 2452

該資料集比較簡單,但是資料相當的大。保留他原始形式是有必要的。我們通過資料標準化處理對他做簡單的處理以降低問題的複雜度

標準化的數學公式為:

資料規範化詳見這個博主的:

我使用的jupyter notebook編譯器(資料匯入jupyter notebook有兩種方法,一種是直接在notebook就新建乙個txt文字直接複製貼上就好,第二種是通過本地文件上傳檔案詳見:

**實現:

import numpy as np

import matplotlib.pyplot as plt

x,y=,

for sample in open('prices.txt','r'):

_x,_y=sample.split(',')#由於檔案是用逗號個開的,所以呼叫split方法並將逗號作為引數傳入。

x,y=np.array(x),np.array(y)

x=(x-x.mean())/x.std()

plt.figure()

plt.scatter(x,y,c='g',s=6)

plt.show()

split用法詳見:

執行結果為:

這就是第一步:資料預處理

通過目測,我們選擇線性回歸方程中的多項式擬合來得到結果,模型數序表示式如下:

其中這裡我做乙個改進將損失函式改為常用均方誤差的損失函式

對於大多數的機器學習演算法,所謂的訓練就是使得某個損失函式最小的過程。

#在(-2,4,)這個區間上取100個點作為畫圖基礎

#deg引數代表著模型引數中的n,即返回模型中的多項式的次數

#返回的模型能夠輸入根據輸入的x0,返回**相對應的**的y

x0=np.linspace(-2,4,10)

def get_model(deg):

return lambda input_x=x0:np.polyval(np.polyfit(x,y,deg),input_x)

polyfit(x,y,deg)就是多項式的擬合函式,返回最小引數的p,即多項式的各項係數

polyval(p,x):就是返回多項式y的值

為了簡單,採用n=1,4,10進行估計,要想得到乙個較好的模型,原理就是使得損失函式最小。

#根據引數n,輸入的x、y返回相對應的損失

def get_cost(deg,input_x,input_y):

return 1/input_x.size*((get_model(deg)(input_x)-input_y)**2).sum()

test_set=(1,4,10)

for d in test_set:

#輸出相應的損失

print(get_cost(d,x,y))

結果是:

n=1:  4116265480.8660836

n=4: 4004783261.3479757

n=10: 3228716880.003951

可以看出n=10優於其他引數。

#畫出相應的影象

plt.scatter(x,y,c='g',s=20)

for d in test_set:

plt.plot(x0,get_model(d)(),label="degree={}".format(d))

#將座標軸限制在一定的範圍內

但我們可以從圖中看出n=4時已經出現過擬合的現象。n=10就非常不合理了

Python機器學習 第乙個機器學習專案

資料集 1.導入庫 import pandas as pd import numpy as np import matplotlib as plt from sklearn.model selection import train test split from sklearn.model sele...

機器學習第乙個演算法

單變數線性回歸 導包import numpy as np import matplotlib.pyplot as plt plt.rcparams font.sans serif simhei 正常顯示中文 plt.rcparams axes.unicode minus false 正常顯示符號 讀...

python第乙個程式設計 第乙個 Python 程式

簡述 安裝完 python 後,windows 中 開始選單或安裝目錄下就會有 idle 開發 python 程式的基本 ide 整合開發環境 幫助手冊 模組文件等。linux 中 只需要在命令列中輸入 python 命令即可啟動互動式程式設計。互動式程式設計 互動式程式設計不需要建立指令碼檔案,是...