復習用アウトプット

データサイエンティスト講座を受講し始めて
早2か月が経ちましたが
内容が難しく中々日々のアウトプットがでできませんでした。

人に見せるためにきれいに整えようという
一種の完璧主義がかえって
アウトプットの邪魔をしているように思います。

読んでもらうことを考えずに
どんなに曖昧でも
とりあえず
昨日の授業内容を復習がてら書いてみることで
不明点や曖昧な点
なにがわからないのかがわからない点を
はっきりできたらいいなという
試み程度にやってみようと思う。

昨日のテーマは
前回、前々回の振り返りとして
線形回帰、ロジスティック回帰、因果推論の話をしたあとに
教師あり機械学習について学んでいる。

教師あり機械学習とは

コンピュータが過去のデータを使ってパターンを学び
そのパターンを基に新しいデータを予測する方法です。

例:

  • 問題:猫と犬の写真を分類する

  • 方法

    1. 学習データ:猫と犬のラベル付きの写真をたくさん用意します。

    2. 学習:コンピュータにこれらの写真を見せて、猫と犬の違いを学ばせます。

    3. 予測:新しい写真を見せると、コンピュータがそれが猫か犬かを予測します。

ポイント:

  • ラベル付きデータ:答え(ラベル)がわかっているデータを使って学習します。

  • 目的:新しいデータに対して正しい答えを予測すること。

教師あり機械学習は、過去の経験をもとに未来を予測するための技術です。

機械学習にはモデリングデータ(学習させるためのデータ)
というものが必要で
モデリングの種類には
回帰:被説明変数が連続値(1,2,3,5,10….)
分類:被説明変数がカテゴリ(0か1)
などがあります。

モデリングの手法としては

  • 線形回帰

  • ロジスティック回帰

  • 決定木

  • ランダムフォレスト

  • AdaBoost

  • サポートベクターマシン

  • ニューラルネットワーク

  • などがある。※線形回帰が以外は回帰・分類問題どちらにも使用可能

機械学習の上での心構えとして

・機械学習アルゴリズムは明確な理論をもって作られたアルゴリズムばかりではない。なぜうまくいったのか説明できないものもある。
・アルゴリズムの仕組みと過学習を押さえるためのハイパーパラメータを理解することに時間を割く(次の授業で学ぶ)

一般的なデータの分割の考え方

データをTrain60%,Validation20%,Test20%の3つに分ける
Train,Validはモデルの学習・調整用
Testは疑似的な未知のデータとしてテストするために使用する

Phython

#データプロファイリングツールのインストール
! pip install ydata_profiling

#日本語フォントを使用できるようにするツールのインストール
! pip install japanize-matplotlib

#データ分析に必須な人たち
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from ydata_profiling import ProfileReport

# 描画の際に日本語を使えるようにする
import japanize_matplotlib
japanize_matplotlib.japanize()

#前処理・特徴量エンジニアリング - 欠損値の処理
isnull().sum()
fillna("不明", inplace=True)
describe() #Rのsummary関数 、標準偏差はでるがこれらは連続値のみの使用
info() データの方や欠損値の有無
get_dummies(df, columns = categorical_vars)ダミー変数の作成
drop("user_id", axis=1, inplace=True)分析に不要な列の削除
value_counts()データ量の確認、不均衡ではないか?

不均衡データは、一部のクラスが他のクラスよりもはるかに少ないデータセットのことで、そのまま学習すると、多数派のデータに引っ張られてしまう。
以下のような方法で対処することでモデルの精度を上げることができます。

  • over/under sampling

  • モデルを学習する際に、多数派のラベルの重みを小さく、少数派のラベルの重みを大きくする

学習データ、検証データ、テストデータの分割

X_train_valid, X_test, y_train_valid, y_test = train_test_split(df2, target, test_size = 0.2, random_state=1234)

X_train, X_valid, y_train, y_valid = train_test_split(X_train_valid, y_train_valid, test_size = 0.25, random_state=1234)

モデリング

from sklearn.linear_model import LogisticRegression ロジスティック回帰
from sklearn.metrics import roc_curve, auc, precision_recall_curve, average_precision_score, roc_auc_score

clf = LogisticRegression(penalty="l2", C=0.001, max_iter=15000, class_weight="balanced", random_state=1234)
clf.fit(X_train, y_train)
y_pred_proba = clf.predict_proba(X_valid)
y_score = y_pred_proba[:,1]


この記事が気に入ったらサポートをしてみませんか?