Menu
CoddyTech

特徴量とラベルの関係

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

ラベルとともに変化する特徴量はどれでしょうか?各特徴量とラベル(悪性は0、良性は1)の相関を求め、相関の強い順に並べてみましょう。

組織データの平均特徴量10個について、相関係数rを横棒で示した図。上から相関の強い順:平均凹点 -0.78、平均周長 -0.74、平均半径 -0.73、平均フラクタル次元の0.01まで

X.corrwith(y)はすべての特徴量の r を一度に求めます:

X = cancer.data[cancer.feature_names[:10]]
r = X.corrwith(cancer.target)
strength = np.abs(r).sort_values(ascending=False)
for name in strength.index[:3]:
    print(name, np.round(r[name], 2))

これは次のように出力されます:

mean concave points -0.78
mean perimeter -0.74
mean radius -0.73

r が負の値の場合、特徴量はクラス 0 の方が大きいことを意味します。つまり、悪性細胞の方が凹点が多くなります。np.abs は符号にかかわらず、強さで順位付けします。

0に近い特徴量は、フラクタル次元と同様に、クラス間でほとんど差がありません。除外候補です。

challenge icon

チャレンジ

中級

モデルはどの組織の特徴量を最初に試すべきでしょうか?入力はグループ(error または worst)と k です。スターターコードでは、そのグループの特徴量が X に格納されています。

  1. y との r の強さで特徴量を順位付けします。
  2. 上位 k 個を、符号付きの r とともに小数点以下2桁で出力します。
  3. 符号を確認します。最も強い特徴量について、クラスごとの平均値を出力します。

mean グループで k = 2 の場合:

Top 2 mean features:
mean concave points: -0.78
mean perimeter: -0.74
mean concave points by class: malignant 0.09, benign 0.03

自分で試してみよう

import numpy as np
from sklearn.datasets import load_breast_cancer

group = input()
k = int(input())
cancer = load_breast_cancer(as_frame=True)
df = cancer.frame
y = cancer.target
# グループの10個の特徴量: mean、error、worstのいずれか
start = {"mean": 0, "error": 10, "worst": 20}[group]
X = cancer.data[cancer.feature_names[start:start + 10]]

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

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

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

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