最適な2つの特徴量
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 59/64。
この章で約束した図がこちらです。最も強い2つの平均特徴量を1つの散布図に示し、クラスごとに色分けしています。
良性のサンプルは左下に密集し、悪性のサンプルは上と右に広がっています。この2つを使うモデルは、雲が交わるところで間違いを犯します。
もう一つ確認しましょう。この2つはほとんど同じでしょうか?
first = strength.index[0]
second = strength.index[1]
print(np.round(df[first].corr(df[second]), 2))これは0.85を出力します。関連はありますが、コピーではありません。0.99では、2つ目の特徴が1つ目を繰り返し、新しい情報はほとんど追加されません。
チャレンジ
中級error特徴量は、1つのサンプル内の細胞間で測定値がどれほど変動したかを表します。最も強い2つの特徴量でクラスを見分けられるでしょうか?スターターコードでは、それらを順位付けしてfirstとsecondに格納しています。label(ax)はグラフにラベルを付けます。
r between them:と、それらの相関係数rを小数第2位まで表示します。- クラスごとに散布図を1つ描き、横軸に
firstを取り、クラス名をラベルにします。 label(ax)を呼び出し、凡例を追加して、グラフを表示します。
最も強いworstのペア(rは0.82)の場合は、次のようになります。
では、自分のグラフを見て判断しましょう。点群は分かれていますか?相関係数を見ると、互いに重複しているでしょうか?
自分で試してみよう
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer(as_frame=True)
df = cancer.frame
y = cancer.target
# 10個の誤差特徴量:1つのサンプルの細胞間で各測定値がどれだけ変動したか
X = cancer.data[cancer.feature_names[10:20]]
# 強さの順に並べたもの:firstとsecondが最も強い2つ
strength = np.abs(X.corrwith(y)).sort_values(ascending=False)
first = strength.index[0]
second = strength.index[1]
# グラフのタイトルを設定し、2つの特徴量に合わせて軸に名前を付ける
def label(ax):
ax.set_title("Error Features")
ax.set_xlabel(first)
ax.set_ylabel(second)
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ