暇人日記

アラフォーおっさんのコーセラの機械学習の課題を解こうと頑張っています!

Udemyコースで教えてもらったLinear Regressionの基本の流れ データクリーニング

基本の流れは大きく2つのパートに分かれていました。

 前半 データクリーニング

後半 予測

 です。

 

予測はCoursera Machine Learningの内容に入っていましたが、

データクリーニングは入っていなかったので面白かったです。

 

前半のデータクリーニングは大まかに6Stepとなっていました。

 

Step1 一点一様のような予測に影響を与えなさそうなデータを削除する

     4000のSampleがあって、1行に3500種類があるようなデータ 

Step2  5%未満なら欠損値を削除する 

Step3 各要素ごとに正規分布がどうか確認する 

Step4 1%の外れ値を削る

Step5 最小二乗法の確認

Step6 カテゴリー変数の設定

 

 

How編

Step1 一点一様のような予測に影響を与えなさそうなデータを削除する

    describe関数(include='all')で記述統計量のfreqをみる。

   freq/データ数が9割を超えているので一点一様とみなせる

   data.drop(["列名”],axis=1)で削除したデータが作れる

 

Step2  5%未満なら欠損値を削除する 

     isnull().sum()関数で欠損値の数を見る。

    5%以下なら削除して前に進む。

    data.dropna(axis=0)で欠損値を削除したデータが作れる

 

Step3 各要素ごとに正規分布がどうか確認する 

 

sns.displot(data["列名"])でみる

記述統計量と見比べて外れ値の考察をする

 

Step4 1%の外れ値を削る

q=data["列名”].quantile(0.99)で99%の区切りの値を設定する

data[data["列名"]<q)]でqより小さい値だけが残る

=上位1%が外れて99%が残ったことになる

 

グラフでみるとこうなる

 

取り除く前

f:id:omoshiroamericanews:20210607223026p:plain

取り除いた後

f:id:omoshiroamericanews:20210607222954p:plain

 qの実験。99%と98.9%と99.1%の比較

f:id:omoshiroamericanews:20210607223148p:plain

 

(参考)

 外れ値を削除したらIndexをリセットする

f:id:omoshiroamericanews:20210609231011p:plain

 

リセット前 

3867行なのにインデックスは4344までやっている

 

f:id:omoshiroamericanews:20210609231105p:plain

 

リセット後

f:id:omoshiroamericanews:20210612221656p:plain



 

Step5 最小二乗法の確認

確認項目は全部で5つある

 

1/5  線形の確認 散布図で確認。線形性がなければ対数変換。

 

f:id:omoshiroamericanews:20210612221755p:plain

対数変換

f:id:omoshiroamericanews:20210612221931p:plain

 

基データに足す

f:id:omoshiroamericanews:20210612222048p:plain

 

2/5 内在性の確認 

   予測結果とSampleに比例のような相関があるかないかの確認なので

   結果が出るまで分からない

 

3/5 正規性と同分散性の確認

   ①正規性②平均0の確認、Udemyに実践はなかった。。。

   ③同分散性 値が高いところと値低いところで平均からの

         離れ具合が同じかどうか

   対数変換することで担保されているというあっさりしたコメントだった。

 

4/5 自己相関性 時系列を扱うデータにあてはまりやすい。

        Udemyの練習データは時系列でなかったのであっさりスルー

        StatsModelのサマリー表に出てくる

        タービンワトソンで確認する方法があるという説明あり

 

5/5 -多重共線性 StatsModelのVIFで確認する

  VIFで多重共線性があると見えるものは削除

 

 

Step6 カテゴリー変数の設定

pd.get_dummies(data,drop_first = True)で作成する

drop_firstは重要。Nカテゴリーであれば、N-1のダミー変数の作成の必要がある。

そうしないと多重共線性になってしまう。

 

なのでN-1のダミー変数を作成した後にVIFを再度確認する

 

Step1-6で削除する行が出てきた場合は

data.drop(["列名”,axis=1])で削除していく。

 

全部終了したら、yを先頭にして並べ替える

 

以上がUdemyのコースで教えてもらったデータクリーニングの流れでした。

次回Courseraのデータ例に当てはめてみたいと思います!