線形回帰を実行するために開示されている大学UCI機械学習データ、データセットは、データサイクル発電プラント、データの9568個のサンプルの合計であり、各データは、5つの列があり、次のとおりAT(温度)、V(圧力)、AP (湿度)、RH(圧力)、PE(電力出力)。私たちの目標は、それが機械学習の結果は、線形回帰モデルを取得することである、PEは、サンプル出力で、AT / V / AP / RHは、4つのサンプルの特性である直線的な関係を得ることです:
\ [PE = \シータ_ {0} + \シータ_ {1} * +の\シータAT _ {2} * V + \シータ_ {3} * AP + \シータ_ {4} * RH \]
1頭のパンダは、データを読みます
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
data = pd.read_csv('D:/Python/Mechine_learning/data/CCPP/ccpp.csv')
print(data.head())
#输出
AT V AP RH PE
0 23.25 71.29 1008.05 71.36 442.21
1 13.87 42.99 1007.45 81.52 471.12
2 16.91 43.96 1013.32 79.87 465.86
3 10.09 37.14 1012.99 72.59 473.66
4 12.72 40.60 1013.45 86.16 471.23
データ2のアルゴリズムを実行する準備ができ
データの大きさは、
print(data.shape) #(9568, 5) 表明是9568*5的数据集
サンプルを準備し、前記AT、V、AP RH、4列に記載の試料とX、
X = data[['AT','V','AP','RH']]
print(X.head())
#输出
AT V AP RH
0 23.25 71.29 1008.05 71.36
1 13.87 42.99 1007.45 81.52
2 16.91 43.96 1013.32 79.87
3 10.09 37.14 1012.99 72.59
4 12.72 40.60 1013.45 86.16
PEとサンプル出力として、サンプル出力yを準備
y = data[['PE']]
print(y.head())
#输出
PE
0 442.21
1 471.12
2 465.86
3 473.66
4 471.23
トレーニングおよび試験セットの3分割
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
print(X_train.shape) #(7176, 4)
print(y_train.shape) #(7176, 1)
print(X_test.shape) #(2392, 4)
print(y_test.shape) #(2392, 1)
サンプルデータの75%がトレーニングセットとして使用され、サンプルの25%がテストセットとして使用され
4 scikit-学ぶ線形モデルを実行します
アルゴリズムが達成するために、最小二乗法を用いた線形回帰であるscikit-学びます
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train,y_train)
嵌合が完了した後、モデルフィッティング結果を係数表示
print(linreg.intercept_) #[ 452.50329853]
print(linreg.coef_) #[[-1.98558313 -0.23170236 0.06410905 -0.15673512]]
5モデル評価
品質評価モデル、線形回帰、一般的な平均二乗誤差(平均二乗誤差、MSE)を使用して、またはルートには、モデルの品質を評価するテストセットの二乗偏差(二乗平均二乗誤差、RMSE)パフォーマンスを意味します
#模型拟合测试集
y_pred = linreg.predict(X_test)
from sklearn import metrics
#scikit-learn计算MSE RMSE
print("MSE:",metrics.mean_squared_error(y_test, y_pred)) #MSE: 19.4303412392
print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))) #RMSE: 4.4079860752
必要にモデルを選択するときに小さいMSEモデル対応するパラメータに、他の方法異なる係数によって得られる場合MSE又はRMSEは、得られました。
AT、V、APサンプルの特性として3列と、例えば。RHは、出力はまだPEありますか
X = data[['AT','V','AP']]
y = data[['PE']]
from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
from sklearn.linear_model import LinearRegression
linreg = LinearRegression()
linreg.fit(X_train,y_train)
y_pred = linreg.predict(X_test)
from sklearn import metrics
print("MSE:",metrics.mean_squared_error(y_test, y_pred)) #MSE: 22.8503207832
print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test, y_pred))) #RMSE: 4.78020091452
RH、変動のモデルフィッティング影響を除去した後、MSE大きな
6クロスバリデーション
交差検定によりモデルを最適化し続けるために、10倍交差検証、すなわち、CVパラメータが10 cross_val_predictあります
X = data[['AT','V','AP','RH']]
y = data[['PE']]
from sklearn.model_selection import cross_val_predict
predicted = cross_val_predict(linreg, X, y, cv=10)
print("MSE:",metrics.mean_squared_error(y, predicted)) #MSE: 20.7892840922
print("RMSE:",np.sqrt(metrics.mean_squared_error(y, predicted))) #RMSE: 4.55952673994
MSEからなるテストセットの一方部5は25%しか部5よりも大きい交差検定モデルMSEを使用し、これは、主にオフMSEの全てに対応するサンプルのテストセットの予測値を行うことによるものです。前提条件と異なるの両方
7つのペイント観測
= xは、下部近い代表点を直接損失予測Y直線の途中から、真値との関係の変化の予測値を引きます
fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()