#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ファイルを提出しなさい''