#author("2023-11-10T10:31:22+09:00","default:cmdsadmin","cmdsadmin")
[[第6回]]
#author("2024-05-07T10:38:45+09:00","default:cmdsadmin","cmdsadmin")

* 第6回演習課題 [#w3bb626b]

[[課題提出]]のページを熟読したうえで,以下の演習課題に取り組みなさい

以下では,Pythonソースコードの実践により,教師あり学習・分類の理解を深めよう

** 基礎問題 [#e586be99]

''Q6-1【乳がんの診断(2値分類)】''

- ロジスティック回帰を用いて,乳がんの診断問題を解いてみよう

CENTER:&ref(./breast_cancer.png,20%);~
CENTER:図1:乳がんのデータセット

- 【問い】下記の手順を参考し,''Step 3~6 の部分を補充して分類モデルの評価結果を確認せよ''

-- Step 1: skleanのライブラリから「[[breast cancer>https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_breast_cancer.html]]」のデータセットを読み込む 
 # Pandasをインポート
 import pandas as pd
 
 # データを読み込み
 from sklearn.datasets import load_breast_cancer
 data_breast_cancer = load_breast_cancer() 
 
 # 【データ内容】↓
 # 説明変数(特徴量データ): data_breast_cancer.data
 ## mean concave points - 細胞にある凹みの平均個数
 ## symmetry error - 細胞の左右の非対称性の度合い
 ## texture error - 細胞表面の明暗の標準偏差
 ## worst radius - 細胞の平均半径
 ## ...
 
 # 目的変数(正解データ): data_breast_cancer.target
 ## class - 腫瘍の判定結果(悪性: 0, 良性: 1)

-- Step 2: 特徴量と正解データをそれぞれx, tに定義
 # 特徴量データ
 x = data_breast_cancer.data
 
 # 正解データ
 t = data_breast_cancer.target
 
 # 正解データの次元数を2から1へ
 t = t.reshape(-1) 
 
 ## ↑次元削減しければ,Inputデータの次元が合わないとエラーが出る
 ### A column-vector y was passed when a 1d array was expected

-- Step 3: 特徴量の標準化
-- Step 4: 訓練データと検証用データに分割 
--- ※ Step 4 のパラメータを(test_size = 0.2, random_state = 0)に指定しなさい
-- Step 5: ロジスティック回帰 (logistic regression) による学習 
--- ※ Step 5 のパラメータを(random_state = 0, C = 0.1, multi_class = 'auto', solver = 'lbfgs')に指定しなさい
-- Step 6: 適合率(precision),再現率(recall),F値(f1-score)を一括で計算

** 応用問題 [#s5d196b8]

''Q6-2【手書き数値の認識(多クラス分類)】''

- ランダムフォレストを用いて,手書き数値の認識問題を解いてみよう

CENTER:&ref(./digits.png,40%);~
CENTER:図2:0~9の手書き数字が書かれた画像データセット

- 【問い】下記の手順を参考し,''Step 2~5 の部分を補充して分類モデルの評価結果を確認せよ''

-- Step 1:skleanのライブラリから「[[digits>https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html]]」のデータセットを読み込む
 # データを読み込み
 from sklearn.datasets import load_digits
 data_digits = load_digits()
 
 # 【データ内容】↓
 # 説明変数(特徴量データ): data_digits.data
 ## 図2 (b) のように,正確には画像ではなく数値の配列である
 ## 一つの手書き数字は,1チャネルで表される(モノクロ画像)
 ## 一つの手書き数字は,8×8のサイズで構成され,1次元の配列に格納されている
 ### (横向きにスライスした画像を一列につなげるイメージで,64個の数値 の配列から構成される)
 
 # 目的変数(正解データ): data_digits.target
 ## class - 手書き数値の判定結果(0~9中の一つ)

-- Step 2: 特徴量と正解データをそれぞれx, tに定義し,正解データの次元数を2から1へ
-- Step 3: 訓練データと検証データに分割
--- ※ Step 3 のパラメータを(test_size = 0.2, random_state = 0)に指定しなさい
-- Step 4: ランダムフォレストによる学習
--- ※ Step 4 のパラメータを (n_estimators = 200, random_state = 0) に指定しなさい
-- Step 5: 精度 (accuracy),混同行列 (confution matrix) を確認 (参考:[[第3回>https://www2.cmds.kobe-u.ac.jp/wiki/dshandson/?%E7%AC%AC3%E5%9B%9E#rcee5596]])

** 発展問題 [#saf97b3d]

''Q6-3【分類モデルの性能を更に上げてみよう】''

- 多数決アンサンブル分類器を用いて,Q6-2の手書き数値の認識問題を解いてみよう

CENTER:&ref(./voting_classifier.png,40%);~
CENTER:図3:KNNとSVMとLRの3つモデルで組み合わせた多数決アンサンブル分類器

- 【問い】下記の手順を参考し,''Step 1~6 を実行して分類モデルの評価結果を確認せよ''
-- Step 1: データを読み込み (Q6-2と同じ)
-- Step 2: 特徴量と正解データをそれぞれx, tに定義し,正解データの次元数を2から1へ
-- Step 3: 訓練データと検証データに分割
--- ※ Step 3 のパラメータを(test_size = 0.2, random_state = ''123'')に指定しなさい
-- Step 4: 以下の3つ異なる分類モデルを学習せよ

※それぞれモデルにパラメータを図3の赤線のように指定しなさい

--- ① k近傍法 (KNN) による学習 (参考:[[sklearn.neighbors.KNeighborsClassifier>https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html]])
--- ② サポートベクターマシン (SVM) による学習 (参考:[[sklearn.svm.SVC>https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html]])
--- ③ ロジスティック回帰による学習
-- Step 5: 多数決アンサンブル分類器の構築 (参考:[[sklearn.ensemble.VotingClassifier>https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.VotingClassifier.html]])
-- Step 6: 精度 (accuracy),混同行列 (confution matrix) を確認しなさい
--- レポートには,Q6-2の分類手法と比べ,どのような工夫をして,結果的に精度がどこまで向上したかを記述しなさい

''作成したところまでのプログラムのipynbファイルを提出しなさい''


トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS