預測功率和電流之間的關係

一般機器學習的開發流程包括:數據收集---數據清洗與轉換---模型訓練---模型測試---模型部署與整合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: 

  • random_state:是隨機數的種子。隨機數種子:其實就是該組隨機數的編號,在須要重複試驗的時候,保證獲得一組同樣的隨機數。好比你每次都填1其餘參數同樣的狀況下你獲得的隨機數組是同樣的。但填0或不填,每次都會不同。
  • StandardScaler:標準化須要計算特徵的均值和標準差,公式表達爲:。至於爲何要作標準化,https://zhuanlan.zhihu.com/p/24839177

 

 

 (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)

  固然,這裏的話就須要調參了

相關文章
相關標籤/搜索