訓練好了乙個model 以後總需要儲存和再次**, 所以儲存和讀取我們的sklearn model也是同樣重要的一步。
比如,我們根據**樣本資料訓練了一下房價模型,當使用者輸入自己的房子後,我們就需要根據訓練好的房價模型來**使用者房子的**。
這樣就需要在訓練模型後把模型儲存起來,在使用模型時把模型讀取出來對輸入的資料進行**。
這裡儲存和讀取模型有兩種方法,都非常簡單,差別在於儲存和讀取速度的快慢上,因為有乙個是利用了多程序機制,下面我們分別來看一下。
首先我們建立模型並訓練資料:
from sklearn.datasets import load_digits
from sklearn.svm import svc
# 載入資料
digits = load_digits()
x = digits.data
y = digits.target
model = svc()
model.fit(x, y)
pickle是python中用於資料序列化的模組,因此,對於模型的序列化也可以用此模組來進行:
import pickle
# 以寫二進位制的方式開啟檔案
file = open("d:/data/python/model.pickle", "wb")
# 把模型寫入到檔案中
pickle.dump(model, file)
# 關閉檔案
file.close()
這樣會建立d:/data/python/model.pickle的檔案,大家可以自己去嘗試下看看,我這邊生成的檔案大概1m左右。
有了模型檔案之後,在進行**時我們就不需要進行訓練了,而只要把這個訓練好的模型檔案讀取出來,然後直接進行**就可以:
import pickle
# 以讀二進位制的方式開啟檔案
file = open("d:/data/python/model.pickle", "rb")
# 把模型從檔案中讀取出來
model = pickle.load(file)
# 關閉檔案
file.close()
# 用模型進行**
from sklearn.datasets import load_digits
digits = load_digits()
x = digits.data
y = digits.target
print("**值:", model.predict(x[15:20]))
print("實際值:", y[15:20])
輸出為:
**值: [5 6 7 8 9]
實際值: [5 6 7 8 9]
直接上**:
from sklearn.datasets import load_digits
from sklearn.svm import svc
# 用模型進行訓練
digits = load_digits()
x = digits.data
y = digits.target
model = svc()
model.fit(x, y)
# 用joblib儲存模型
from sklearn.externals import joblib
joblib.dump(model, "d:/data/python/model.joblib")
這樣就會生成d:/data/python/model.joblib檔案,看起來比pickle生成的檔案大一點點。
讀取模型:
# 用joblib讀取模型
from sklearn.externals import joblib
model = joblib.load("d:/data/python/model.joblib")
# 對資料進行**
from sklearn.datasets import load_digits
digits = load_digits()
x = digits.data
y = digits.target
print("**值:", model.predict(x[15:20]))
print("實際值:", y[15:20])
輸出為:
**值: [5 6 7 8 9]
實際值: [5 6 7 8 9]
看起來也很簡單,同pickle的區別是joblib會以多程序方式來進行,據說效能會好些。 sklearn資料庫 老魚學sklearn
在做機器學習時需要有資料進行訓練,幸好sklearn提供了很多已經標註好的資料集供我們進行訓練。本節就來看看sklearn提供了哪些可供訓練的資料集。這些資料位於datasets中,為 載入波士頓房價資料,可以用於線性回歸用 sklearn.datasets.load boston 載入方式為 fr...
sklearn交叉驗證 老魚學sklearn
交叉驗證 cross validation 有時亦稱迴圈估計,是一種統計學上將資料樣本切割成較小子集的實用方法。於是可以先在乙個子集上做分析,而其它子集則用來做後續對此分析的確認及驗證。一開始的子集被稱為訓練集。而其它的子集則被稱為驗證集或測試集。交叉驗證是一種評估統計分析 機器學習演算法對獨立於訓...
sklearn交叉驗證3 老魚學sklearn
在上乙個博文中,我們用learning curve函式來確定應該擁有多少的訓練集能夠達到效果,就像乙個人進行學習時需要做多少題目就能擁有較好的考試成績了。本次我們來看下如何調整學習中的引數,類似乙個人是在早上7點鐘開始讀書好還是晚上8點鐘讀書好。資料仍然利用手寫數字識別作為訓練資料 from skl...