一般機器學習的開發流程包括:數據收集---數據清洗與轉換---模型訓練---模型測試---模型部署與整合python
下面,經過一個例子進行完整的機器學習開發流程的學習。react
工程中須要的庫:算法
from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.preprocessing import StandardScaler from sklearn.externals import joblib import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt import pandas as pd from pandas import DataFrame
(1)首先數據的收集,獲取數據:數組
如上,能夠看到,咱們得到須要獲取的是Global_active_power(有功功率)、Global_reactive_power(無功功率)和Global_intensity(電流)之間的關係。dom
path = 'household_power_consumption_1000.txt' df = pd.read_csv(path,sep = ';',low_memory = False) print(df.head()) print(df.info())
(2)而後進入數據清洗階段機器學習
如上, 若是存在空值或異常值的狀況,咱們能夠在這個階段進行處理。函數
new_df = df.replace('?',np.nan) datas = new_df.dropna(axis = 0,how = 'any') print(datas.describe().T)
如上,能夠看到,咱們對於異常值和空值存在的狀況下,直接刪掉了該樣本。學習
能夠看到,1000個樣本只剩下了998個了。測試
而後繼續進行特徵工程處理:spa
#提取出相關數據 X = datas.iloc[:,2:4] Y = datas['Global_intensity'] #劃分訓練集和測試集 X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0) #標準化處理 ss = StandardScaler() X_train = ss.fit_transform(X_train) X_test = ss.transform(X_test)
Tips:
(3)模型訓練
lr = LinearRegression() lr.fit(X_train,Y_train)
如上,咱們能夠經過sklearn封裝好的簡單的語句完成模型的訓練。
(4)模型預測
y_predict = lr.predict(X_test) print("訓練:",lr.score(X_train,Y_train))# print("測試:",lr.score(X_test,Y_test)) mse = np.average((y_predict-Y_test)**2) rmse = np.sqrt(mse) print(rmse)
如上:score是一個評分函數,即R2。
數據的可視化:
## 設置字符集,防止中文亂碼 mpl.rcParams['font.sans-serif']=[u'simHei'] mpl.rcParams['axes.unicode_minus']=False t = np.arange(len(X_test)) plt.figure() plt.plot(t,Y_test,'r-',label = u'真實值') plt.plot(t,y_predict,'b-',label = u'預測值') plt.legend(loc = 'upper right') plt.title(u'線性迴歸預測功率與電流之間的關係') plt.grid(b = True) plt.show()
對於Anaconda2和3同時裝的狀況下,執行3能夠採用下面命令:
(5)模型部署
joblib.dump(lr,"data_lr.model") lr = joblib.load("data_lr.model")
如上,能夠將訓練好的模型存下來,之後用的時候load進來便可。
PS:固然這裏的模型選擇也能夠選擇其餘算法,譬如SVR
模型構建步驟改成:
rbf=svm.SVR(kernel='rbf',C=1, ) rbf.fit(X_train,Y_train)
固然,這裏的話就須要調參了