Menu
CoddyTech

最適な2つの特徴量

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 59/64。

この章で約束した図がこちらです。最も強い2つの平均特徴量を1つの散布図に示し、クラスごとに色分けしています。

平均凹点数を横軸、平均周長を縦軸として組織サンプルを示しています。良性サンプルは左下に密集し、悪性サンプルは右上に広がっており、2つの分布は狭い帯状の範囲で交わっています

良性のサンプルは左下に密集し、悪性のサンプルは上と右に広がっています。この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つ目を繰り返し、新しい情報はほとんど追加されません。

challenge icon

チャレンジ

中級

error特徴量は、1つのサンプル内の細胞間で測定値がどれほど変動したかを表します。最も強い2つの特徴量でクラスを見分けられるでしょうか?スターターコードでは、それらを順位付けしてfirstとsecondに格納しています。label(ax)はグラフにラベルを付けます。

  1. r between them:と、それらの相関係数rを小数第2位まで表示します。
  2. クラスごとに散布図を1つ描き、横軸にfirstを取り、クラス名をラベルにします。
  3. label(ax)を呼び出し、凡例を追加して、グラフを表示します。

最も強いworstのペア(rは0.82)の場合は、次のようになります。

Worst Featuresというタイトルの散布図。横軸はworst concave points、縦軸はworst perimeter。悪性サンプルは青色で右上に、良性サンプルはオレンジ色で左下に分布している

では、自分のグラフを見て判断しましょう。点群は分かれていますか?相関係数を見ると、互いに重複しているでしょうか?

自分で試してみよう

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)


# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

機械学習のための統計のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ