「はじめての機械学習」-重回帰分析編
「はじめての機械学習」シリーズの単回帰分析編です。
このシリーズは、機械学習に初めて取り組むときに、学んだことをシリーズ化してみました。
これから、機械学習に取り組みたいと考えている方のお役にたてれば幸いです。
シリーズのコンテンツ
重回帰分析を使うケース
重回帰分析を使ってPythonでアプリを作る手順をステップバイステップで説明します。
- ステップ1: 必要なライブラリのインポートと設定
Pythonで使用するライブラリのインポートと設定
> %matplotlib inline
> import numpy as np #数値計算ライブラリ
> import pandas as pd #データの操作と整形
> import seaborn as sns #グラフ表示ライブラリ
> from sklearn.model_selection import train_test_split # データ分割に使用するライブラリ
> from sklearn.linear_model import LinearRegression # 重回帰分析モデルライブラリ
> from sklearn.preprocessing import StandardScaler # スケーリングのためのライブラリ
pandas
とscikit-learn
ライブラリをインポートします。pandas
はデータの操作と整形に使用し、scikit-learn
は機械学習モデルの構築に使用します。- ステップ2: データの準備と読み込み
分析に使用するデータをCSVファイルとして準備し、必要に応じて前処理を行います。
例えば、CSVファイルからデータを読み込む場合は、pandas
のread_csv()
関数を使用します。
>df = pd.read_csv(‘sample.csv’) - ステップ3: データの視覚化
データをグラフやプロットを使って可視化し、変数間の関係を観察します。matplotlib
やseaborn
などのライブラリを使用してグラフを作成します。
>sns.distplot(df[‘x1’]) #データの分布をグラフで表示 - ステップ4: データの前処理
データをモデルに適した形式に変換します。欠損値の処理やカテゴリカル変数のエンコーディングなどが必要な場合があります。
例)外れ値除去(3σ法)…正規分布と仮定して±3σ(99.7%)の範囲外の値を外れデータとして除去
データのcol番号を’x6’と仮定した場合
>col = ‘x6’ #列名称を変数に指定
>mean = df.mean() #データの平均取得
>mean[col] #対象の平均
>sigma = df.std() #データの標準偏差取得
>sigma[col] #対象の標準偏差
>low = mean[col] – 3 * sigma[col] #下限計算
>high = mean[col] + 3 * sigma[col] #上限計算
>df2 = df[(df[col]>low) & (df[col]<high)] #データを絞る→df2へ保持
>sns.distplot(df2[‘x6’]) #3σ法を適用させたグラフ表示
># 全変数に外れ除去(3σ法)
>cols = df.columns #カラムListの取得
># データ再構成
>_df = df
>for col in cols:
> #3σ法の上下限値を設定
> low = mean[col] – 3 * sigma[col]
> high = mean[col] + 3 * sigma[col]
> #条件での絞り込み
> _df = _df[(_df[col]>low) & (_df[col]<high)] - ステップ5: モデル構築
モデル構築のためにデータを分割する
>#df.iloc[行,列]
>X = _df.iloc[:,:-1]
>y = _df.iloc[:,-1]
>X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state=1)
>model = LinearRegression() # モデル宣言
>model.fit(X_train,y_train)
>model.score(X_train,y_train) #検証←訓練データ
>model.score(X_test,y_test) #検証←検証データ
データセットをトレーニングデータとテストデータに分割します。
トレーニングデータはモデルの学習に使用し、テストデータはモデルの性能評価に使用します。
分割したトレーニングデータを使って重回帰モデルを学習させます。scikit-learn
のLinearRegression()
クラスを使用します。目的変数と説明変数を指定し、fit()
メソッドを呼び出してモデルを学習させます。 - ステップ6: スケーリング
入力データ(x?)のスケールが異なると、重みだけで盈虚う判断ができないため、入力データのスケールを合わせます。
>scaler = StandardScaler() #scalerの宣言
>scaler.fit(X_train) #scalerの学習←平均と標準偏差を計算
>X_train2 = scaler.transform(X_train) #scaling実行:学習データ
>X_test2 = scaler.transform(X_test) #scaling実行:検証データ
>model = LinearRegression() #モデルの宣言
>model.fit(X_train2,y_train) #モデルの学習
>model.score(X_train2,y_train) #検証←訓練データ
>model.score(X_test2,y_test) #検証←検証データ
>model.coef_ #重みの確認 - ステップ7: 予測の実行
学習したモデルを使って、テストデータの説明変数から目的変数を予測します。predict()
メソッドを使用し、予測結果を取得します。 - ステップ8: モデルの評価
テストデータの実際の目的変数と予測結果を比較し、モデルの性能を評価します。一般的な評価指標として、平均二乗誤差(Mean Squared Error)や決定係数(Coefficient of Determination)などがあります。 - ステップ9: 結果の可視化
学習済みモデルの予測結果を可視化し、実際のデータと比較します。matplotlib
やseaborn
を使用して、予測結果や残差プロットなどを作成します。