ようこそ、単回帰の記事へ。
本日は、データセットから単回帰モデルを構築する方法について見ていきます。
この記事のコーディング例の前に、単回帰の概念を詳しく説明した記事を読むことができます。
線形回帰モデルを構築するための6つのステップ
ステップ1:データセットのインポート
ステップ2: データの前処理
ステップ3:テストセットとトレーニングセットの分割
ステップ4:訓練セットに線形回帰モデルを適合させる
ステップ5:テスト結果の予測 
ステップ6:テスト結果の可視化
さて、ステップを見たところで、同じものをコーディングすることから始めましょう。
Pythonで線形回帰モデルを実装する
この記事では、給与のデータセットを使用します。
このデータセットには、経験年数と給与の2つのカラムがあります。
データセットへのリンクは – https://github.com/content-anu/dataset-simple-linear です。
この記事もチェック:PythonのNumpyを使って線形回帰をゼロから実装していく
1. データセットのインポート
まず、pandasを使ってデータセットをインポートし、numpyやmatplotlibなどの他のライブラリもインポートします。
| importnumpy as npimportpandas as pdimportmatplotlib.pyplot as pltdataset =pd.read_csv('Salary_Data.csv')dataset.head() | 
dataset.head()`はデータセットの最初の数列を表示します。
上記のスニペットの出力は以下の通りです。
| X =dataset.iloc[:,:-1].values  #independent variable arrayy =dataset.iloc[:,1].values  #dependent variable vector | 
2. データの前処理
データセットのインポートが完了したので、データの前処理を行います。
| fromsklearn.model_selection importtrain_test_splitX_train, X_test, y_train, y_test =train_test_split(X,y,test_size=1/3,random_state=0) | 
Xは独立変数の配列、y` は従属変数のベクトルです。
配列とベクトルの違いに注意してください。
従属変数はベクトルでなければならず、独立変数は配列そのものでなければならない。
3. データセットの分割
データセットをテストセットと学習セットに分割する必要がある.一般的には、それぞれ20-80ポリシー、30-70ポリシーに従います。
なぜ分割が必要なのでしょうか?それは、年数や給与に応じたモデルを学習させたいからです。
そして、テストセットでモデルをテストします。
テストセットのデータでモデルが行った予測が、データセットで与えられたものと一致するかどうかをチェックします。
もし一致すれば、我々のモデルが正確であり、正しい予測をしていることを意味します。
| fromsklearn.linear_model importLinearRegressionregressor =LinearRegression()regressor.fit(X_train,y_train) #actually produces the linear eqn for the data | 
線形回帰の特徴スケーリングはライブラリに任せておけばよいので、適用する必要はない。
4. トレーニングセットへの線形回帰モデルのフィッティング
sklearn の線形モデルライブラリから、linear regression クラスをインポートします。
regressor という線形回帰クラスのオブジェクトを作成します。
regressorをトレーニングセットにフィットさせるために、fitメソッド-関数を呼び出します。
ターゲット値y_trainにX_train(特徴量の行列の学習データ)をフィットさせる必要があります。
このように、モデルは相関関係を学習し、独立変数から従属変数を予測する方法を学習します。
| y_pred =regressor.predict(X_test) y_pred | 
| y_test | 
この記事もチェック:NumPyの便利な線形代数メソッド(行列のランク,行列式,逆行列など)
5. テストセットの結果を予測する
我々は、テスト集合の給与のすべての予測を含むベクトルを作成します。
そして、予測された給与は y_pred という名前のベクトルに入れられます(テスト集合のすべてのオブザベーションの予測値が含まれます)。
predict` メソッドは、テスト集合の予測を行います。
したがって、入力はテストセットとなります。
predict のパラメータは配列またはスパース行列でなければならず、したがって入力は X_test となります。
| #plot for the TRAINplt.scatter(X_train, y_train, color='red') # plotting the observation lineplt.plot(X_train, regressor.predict(X_train), color='blue') # plotting the regression lineplt.title("Salary vs Experience (Training set)") # stating the title of the graphplt.xlabel("Years of experience") # adding the name of x-axisplt.ylabel("Salaries") # adding the name of y-axisplt.show() # specifies end of graph | 
| #plot for the TESTplt.scatter(X_test, y_test, color='red') plt.plot(X_train, regressor.predict(X_train), color='blue') # plotting the regression lineplt.title("Salary vs Experience (Testing set)")plt.xlabel("Years of experience") plt.ylabel("Salaries") plt.show()  | 
| # importing the datasetimportnumpy as npimportpandas as pdimportmatplotlib.pyplot as plt dataset =pd.read_csv('Salary_Data.csv')dataset.head()# data preprocessingX =dataset.iloc[:, :-1].values  #independent variable arrayy =dataset.iloc[:,1].values  #dependent variable vector# splitting the datasetfromsklearn.model_selection importtrain_test_splitX_train, X_test, y_train, y_test =train_test_split(X,y,test_size=1/3,random_state=0)# fitting the regression modelfromsklearn.linear_model importLinearRegressionregressor =LinearRegression()regressor.fit(X_train,y_train) #actually produces the linear eqn for the data# predicting the test set resultsy_pred =regressor.predict(X_test) y_predy_test# visualizing the results#plot for the TRAIN plt.scatter(X_train, y_train, color='red') # plotting the observation lineplt.plot(X_train, regressor.predict(X_train), color='blue') # plotting the regression lineplt.title("Salary vs Experience (Training set)") # stating the title of the graph plt.xlabel("Years of experience") # adding the name of x-axisplt.ylabel("Salaries") # adding the name of y-axisplt.show() # specifies end of graph#plot for the TEST plt.scatter(X_test, y_test, color='red') plt.plot(X_train, regressor.predict(X_train), color='blue') # plotting the regression lineplt.title("Salary vs Experience (Testing set)") plt.xlabel("Years of experience") plt.ylabel("Salaries") plt.show()  | 

y_testはテスト集合の実給与です。
y_pred は予測された給与です。
結果の可視化
コードを可視化するとどのような結果になるか見てみましょう。
1. 点(観測値)のプロット
データを可視化するために、matplotlib を使ってグラフをプロットします。
実際の観測点をプロットするには、与えられた実際の値をプロットすることになります。
X軸は経験年数、Y軸は給与の予測値です。
plt.scatter は、データの散布図を描きます。
パラメータは以下の通りです。
- X – 座標 (X_train: 経験年数)
- 
- Y – 座標 (y_train:従業員の実給料)
 
- 色(回帰線:赤、観測線:青)
2. 回帰線のプロット
plt.plotは以下のパラメータを持っています。
- X座標 (X_train) – 年代数
- Y座標 (predict on X_train) – X-trainの予測値(年数ベース).
注: y座標は、y_pred はテストセット観測値の予測サラリーであるため、y_pred ではない。

上記のコードは、以下のような訓練集合のプロットを生成します。


上記のコード・スニペットは、以下のようなプロットを生成します。

Linear Regression を実装するための完全な Python コード

上記のコードスニペットの出力は、以下の通りです。

まとめ
単純な線形回帰に関するこの記事はこれで終わりです。
私たちの例が気に入り、同様にモデルをコーディングしてみたことを望みます。
下のコメント欄でフィードバックをお聞かせください。
もし他の回帰モデルに興味があるなら、重回帰モデルを読んでみてください。
