---
title: マテリアルズ・インフォマティクス連続セミナー,最低限のPython package,データ紹介,LLMによる知識獲得
tags:  #データ解析学 #セミナー  
author: [木野日織](https://convert.docswell.com/user/3465680103)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/D7YVK1YP7M.jpg?width=480
description: テリアルズ・インフォマティクス連続セミナー 第二版 レポジトリ：https://bitbucket.org/kino_h/python_mi_seminar_2023rev2/src/main/
published: January 22, 24
canonical: https://convert.docswell.com/s/3465680103/ZJLP43-2024-01-22-142423
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/D7YVK1YP7M.jpg)

マテリアルズ・インフォマティクス
連続セミナー
Pythonモジュール，データ紹介，
大規模言語モデルによる知識獲得
木野日織（きのひおり）


# Page. 2

![Page Image](https://bcdn.docswell.com/page/VENMR2PMJ8.jpg)

今回の内容
内容
Pythonモ
ジュールの紹
介
データの紹介
LLMの利用


# Page. 3

![Page Image](https://bcdn.docswell.com/page/Y79NM13W73.jpg)

今回の内容
内容
Pythonモ
ジュールの紹
介
numpy
データの紹介
Pandas
LLMの利用


# Page. 4

![Page Image](https://bcdn.docswell.com/page/G78KL4MRJD.jpg)

代数計算クラスライブラリ
問題点：Pythonのリストは多次元ベクトルを書けるが、四則演算は
できない。例えば演算子＋はリストのappendになる。
目的：Pythonでの代数ベクトルや高次元行列の基本型を与え、演算
を行う。
手段：numpy


# Page. 5

![Page Image](https://bcdn.docswell.com/page/L7LZL632ER.jpg)

代数演算
numpy
import nump as np
# リストからarrayへの変換
Aarray = np.array(Alist)
ベクトル演算
行列演算
手法：
numpy.array
手法：
numpy.matrix
作成方法
Pythonリスト
から作成
Pandasデータ
フレームから
作成


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4EMVM5D9EW.jpg)

表形式データクラスライブラリ
目的：表形式のデータの操作を行う。(“データ解析学のExcel”)
手段：Pandasデータフレーム
できること：列毎に複数の型を入れる。データ欠如セルの操作。可視化。
Pandasデータフレーム
カラム
名１
ヵラム
名２
カラム
名３
カラム
名４
…
CSVファイル
numpy array
整数、実数、文字列、・・・


# Page. 7

![Page Image](https://bcdn.docswell.com/page/PER2V34979.jpg)

Pandasデータフレーム
iImport pandas as pd
目的：表形式
データ
import pandas as pd
# CSVファイルから観測データ
を読み込む。
df = pd.read_csv(filepath)
手段：Pandas
データフレー
ム
作成方法
numpy.array
から作成
# CSVファイルへ観測データを保
存する。
df = pd.to_csv(filepath)
リストから作
成
辞書から作成
保存方法
CSVファイル
から読み込む
CSVファイル
へ保存する


# Page. 8

![Page Image](https://bcdn.docswell.com/page/P7XDZ423JX.jpg)

numpy
手法：
numpy.array
作成方法
import pandas as pd
Pandasデータ
フレームから
作成
Pythonリスト
から作成
# dfがpandasデータフレーム
# pandasからarrayへの変換
Aarray = df.values
Aarray = df.loc[:, COLUMN_LIST].values
全データから
作成
カラムを指定
して作成


# Page. 9

![Page Image](https://bcdn.docswell.com/page/37KX8ZMNJD.jpg)

今回の内容
内容
Pythonモジュー
ルの紹介
データの紹介
トイモデル
物質データ
LLMの利用


# Page. 10

![Page Image](https://bcdn.docswell.com/page/LJ352DYZ75.jpg)

データセット
• トイモデル (x5_sin, x5_sin_new)
𝑥Ԧ = (𝑥, 𝑥 2 , 𝑥 3 , 𝑥 4 , 𝑥 5 , sin 𝑥 )
𝑦 = sin 𝑥 + 𝑁(0, 𝑠𝑐𝑎𝑙𝑒 2 )
• 希土類コバルト(ReCo)合金磁気相転移温度(𝑇𝐶 ) (ReCo)
説明変数
希土類元素：
原子番号 (カラム名 Z)
d,f 軌道の電子配置 (f4,d5)期待値
その射影量 (4f, S4f, J4f,(g-1)J4f, (2-g)J4f)
構造由来説明変数 ：
希土類元素の体積あたり数密度 (C_R)
Co の体積あたり数密度 (C_T)
元素あたりの体積（vol_per_atom)
（構造はAtomWorkから取得し加工済み。）
目的変数：磁気相転移温度T_C
Re Z


# Page. 11

![Page Image](https://bcdn.docswell.com/page/8JDDZP54JG.jpg)

データセット
3D-000
3D-001
• ８原子炭素結晶の全エネルギー(Carbon8)
元論文ではGRRM法により炭素８原子による結晶構造の構造探索を
行っています。
目的変数あり：Carbon8
• 説明変数：Behlerの二体symmetry functionによる変換し
た量を説明変数の結晶平均とする。著作権のため元構造
は本ハンズオンに含まれません。
• 目的変数：全エネルギー（著作権のため全エネルギーを
siestaでPBE+D2で計算し直しています。このため論文の
値が一致しません。）
3D-003
3D-004
目的変数なし： Carbon8_desc, Carbon8_desc_all
• 説明変数：Behlerの二体symmetry functionによる変換し
た原子毎の量を説明変数とする。
1. Makito Takagi, Tetsuya Taketsugu, Hiori Kino, Yoshitaka Tateyama, Kiyoyuki Terakura, and Satoshi Maeda,
“Global search for low-lying crystal structures using the artificial force induced reaction method: A case study on carbon”, Phys. Rev. B 95, 184110, (2017)
2. Jörg Behler and Michele Parrinello, &quot;Generalized Neural-Network Representation of High-Dimensional Potential-Energy Surfaces&quot;, Phys. Rev. Lett. 98, 146401(2007)


# Page. 12

![Page Image](https://bcdn.docswell.com/page/VEPXDNGVJ8.jpg)

データセット
• 閃亜鉛鉱構造とウルツ鉱構造のエネルギー差データ
(ZB_WZ_all, ZB_WZ_3, ZB_WZ_2)
ZB_WZ_allの説明変数
二元合金の元素説明変数,
IP（イオン化ポテンシャル）,EA（電子親和力）,
Highest_occ state energy, Lowest_unocc state energy, s,p
の原子半径
ZB_WZ_3, ZB_WZ_2
ZB_WZ_allの説明変数を関数同定問題により３または２つの
変数に変換した説明変数(詳細は文献参照）
目的変数
二元合金の閃亜鉛鉱構造とウルツ鉱構造のエネルギー差dE
Luca M. Ghiringhelli, Jan Vybiral, Sergey V. Levchenko, Claudia Draxl, and Matthias Scheffler, &quot;Big Data of Materials Science: Critical
Role of the Descriptor“, Phys. Rev. Lett. 114, 105503 (2015)


# Page. 13

![Page Image](https://bcdn.docswell.com/page/27VL1K6REQ.jpg)

データセット
• 微小変位を入れた鉄構造データ:
Fe2, Fe2_new
鉄構造データ
BCC構造
FCC構造
HCP構造
１．微小変位を加えた結晶を作る。
２．Behlerの二体symmetry functionで説明変数に変換する。
説明変数：二体対称性関数生成時のパラメタ
目的変数：無し
元データ:Materials Project
観測データ
新規データ


# Page. 14

![Page Image](https://bcdn.docswell.com/page/5JGX2QN67L.jpg)

データセット
•
単元素からなる基底状態の結晶構構造 (mono)
単元素からなる基底状態の結晶構造に対して原子の説明変数データ。
説明変数
1.min_oxidation_state, max_oxidation_state: min. and max of
oxidation state
2.row group
3.s p d f: valence electrion occupation
4.atomic_radius_calculated: calculated atomic radius
5.X(chi), IP, EA : electronegativity, ionization potential, electron
affinity
目的変数（カテゴリー変数）
1.misc (black)
2.hcp (red)
3.bcc (blue)
4.fcc (green)
元データ：wikipedia
Data_name


# Page. 15

![Page Image](https://bcdn.docswell.com/page/47Q8PKQ2EP.jpg)

今回の内容
内容
Pythonモ
ジュールの紹
介
データの紹介
LLMの利用


# Page. 16

![Page Image](https://bcdn.docswell.com/page/KE42YPNP71.jpg)

教科書と知識獲得の目的
教科書
知識取得の目的
教科書は理解し易いようにレベル毎に知識を
制限している。
知識を得るのは何のため？
理由：一度に全部書いたら理解できないから。
問題解決のための実践。
理解が進むにつれ，より高度な内容の
教科書を読むことなる。


# Page. 17

![Page Image](https://bcdn.docswell.com/page/L71M695XJG.jpg)

従来の学習と演習
学習者レベルの変化への対応
教科書・
講義
教科書・
講義
追加説明
演習・
専門書
学習者
問題解決を支援
学習者
実践への対応
図：LLMによる学習法の変化。演習は講義とは異なる大学過程・研究室や家庭教師で得られる。


# Page. 18

![Page Image](https://bcdn.docswell.com/page/G7W3WQ5K72.jpg)

LLMを利用した学習と問題解決支援
学習者レベルの変化への対応
教科書・
講義
教科書・
講義
LLMが追加説明・
説明補助
LLM
学習者
学習者
LLMが学習者の
問題解決を問題
に応じて支援
実践への対応
図：LLMによる学習法の変化。LLMが追加説明・演習をある程度代行する。


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4JZV5WNN73.jpg)

LLMとの利用
LLMへの質問と回答の問題点
授業の質問：
講師は自分が授業したことを理解している。
授業内容への回答なので（学習者が具体的に質問を
説明しなくても少ない文字数の質問で）的確な回答
が得られます。
•
•
LLMは少ない文字数の質問では何かしら一般的な
回答が返ってきます。
またLLMにはハルシネーション（存在しない事実
や正確でない情報を生成する。）が起きる。
→必ずしも的確な回答ではない。
現在のLLMとの付き合い方
LLMが正しい知識（回答）を全て教えてくれるのではないの
で鵜呑みにしてはいけない。
•
•
LLMは知識獲得・問題解決の支援を行うだけ。
LLMの回答をユーザーが自分でまとめ直す必要もある。
（LLMはその支援も行える。）
現状ではユーザーが
最低限の知識を持ち，
明確な質問をして，
LLMの回答を取捨選択する。


# Page. 20

![Page Image](https://bcdn.docswell.com/page/YE659G89JV.jpg)

LLMの利用
LLMにより問題
を解決する。
LLMにより知識
LLMによるコー
を得る。
ドを書く。
LLMにより
scikit-learnの知
識を得る


# Page. 21

![Page Image](https://bcdn.docswell.com/page/GE5YNV9DE4.jpg)

LLMによる知識の取捨選択
専門家に質問すると「ドキュメントに書いて
ある。」と言いうが，特に初心者は，大量の
情報から有用な情報を取捨選択することが困
難。
どこに有用な情報があるのか分からない状態
で，一年かけて書籍やマニュアルを全て読む
のでは，具体的な目的に対して遅すぎる。例
えば，回帰モデルを学習するためだけに
Scikit-learnの全てを知る必要もない。
LLMはごく短時間に有用な情報をあなたの目
的に応じてある程度取捨選択した回答を行え
る。そして，そこから学習・情報取得の足が
かりを得ることができる。
ユーザー：
Q. 回帰予測モデル？
LLM
答え
？
？
…
Scikit-learnに関する情報
図：LLMがあなたの目的に応じて情報を
取捨選択する。


# Page. 22

![Page Image](https://bcdn.docswell.com/page/972G535M7R.jpg)

LLMへの質問の粒度
大雑把な質
問
知識があれば，ピンポイントに質
問できる。
知識が無い場合は大雑把な質問へ
の回答を手がかりとして深掘りし
ていく。
詳細な質問
詳細な質問
１
２
より詳細な
より詳細な
より詳細な
質問１．１
質問１．２
質問２
図：質問の階層構造。


# Page. 23

![Page Image](https://bcdn.docswell.com/page/DJYVK1KPJM.jpg)

例１）決定木手法
LLMに決定木手法の詳細を説明してもらう。
方法：
1. LLMに大雑把な質問をする。
2. 詳細に関してLLMに補足説明してもらう。
人が全体像と詳細を理解する。


# Page. 24

![Page Image](https://bcdn.docswell.com/page/V7NMR2RME8.jpg)

一連のIf文（決定木）による回帰モデル
全データ
決定木
If x1 &gt;= xvalue1 then
if x2&gt;=xvalu2A then
y = yvalue1
else
y = yvalue2
Else
…
Endif
x1&gt;=xvalue1
のデータ
x2&gt;=xvalue2A
のデータ
yvalue1
X2&lt;xvalue2A
のデータ
yvalue2
図：決定木アルゴリズム
図：決定木アルゴリズムの模式図
x1&lt;xvalue1の
データ


# Page. 25

![Page Image](https://bcdn.docswell.com/page/YJ9NM1MWJ3.jpg)

例）決定木手法
ユーザー：決定木回帰手法について説明してください。
背景灰色の文章はプロンプトを指す。
ChatGPT4:&quot;決定木回帰手法&quot;について説明します。
決定木回帰は、教師あり学習アルゴリズムの一つで、連続的な数値を予測するために使用されます。この手法は、
データを学習し、特徴空間を「決定木」と呼ばれる木構造で表現します。決定木は、分岐（ノード）と終端点
（葉）から構成され、各ノードはある特徴に基づいてデータを分割する決定ルールを表しています。
LLMの回答は背景なしの枠で囲う。
### 決定木回帰のプロセス：
1. **ルートノードの選択**：最初に、全データセットを表すルートノードから始めます。
2. **最適な分割の決定**：データを二つのサブセットに分割する最適な特徴と閾値を選びます。分割の質は、平
均二乗誤差（MSE）やジニ不純度などの基準を用いて評価されます。
3. **再帰的分割**：分割を再帰的に繰り返し、サブセットが十分に小さくなるか、あるいは分割による改善が得
られなくなるまで処理を続けます。これにより、木の枝が成長します。
4. **葉ノードの予測値の決定**：最終的な葉ノードでは、そのノードに含まれるデータポイントの目的変数の平
均値が予測値として使用されます。
### 決定木回帰の特徴：
- **解釈が容易**：決定木は直観的に理解しやすいモデルであり、どのように予測が行われているかを追跡する
ことができます。
- **非線形関係のモデリング**：非線形データに対しても効果的に機能し、複雑なデータ構造を捉えることがで
きます。
- **特徴選択**：関係のない特徴は自然と無視されるため、特徴選択のプロセスが自然に行われます。
### 考慮すべき点：
- **過学習**：木が深すぎると、データのノイズまで学習してしまうことがあります。これを防ぐためには枝刈
りが行われます。
- **データの変化に敏感**：小さなデータセットの変更が大きな違いをもたらすことがあります。したがって、
モデルの汎化能力を確保するためには、クロスバリデーションなどの技術が必要です。
決定木回帰は、金融、医療、エネルギー管理など、様々な領域で有用です。データが複雑で、関係が直感的に理
解しにくい場合や、解釈可能なモデルが求められる場合に特に有効です。
ChatGPT4や’Microsoft Copilot’ と生成元
も書かれる。枠内外に書く場合あり。


# Page. 26

![Page Image](https://bcdn.docswell.com/page/GJ8KL4LRED.jpg)

例）決定木手法
ユーザー：決定木回帰手法について説明してください。
ChatGPT4:&quot;決定木回帰手法&quot;について説明します。
決定木回帰は、教師あり学習アルゴリズムの一つで、連続的な数値を予測するために使用されます。この手法は、
データを学習し、特徴空間を「決定木」と呼ばれる木構造で表現します。決定木は、分岐（ノード）と終端点
（葉）から構成され、各ノードはある特徴に基づいてデータを分割する決定ルールを表しています。
モデル解釈を行
非線形関係のモ
う。
デルを作る。
特徴選択を行う。
### 決定木回帰のプロセス：
1. **ルートノードの選択**：最初に、全データセットを表すルートノードから始めます。
決定木回帰モデ
2. **最適な分割の決定**：データを二つのサブセットに分割する最適な特徴と閾値を選びます。分割の質は、平
均二乗誤差（MSE）やジニ不純度などの基準を用いて評価されます。
ル方式
3. **再帰的分割**：分割を再帰的に繰り返し、サブセットが十分に小さくなるか、あるいは分割による改善が得
られなくなるまで処理を続けます。これにより、木の枝が成長します。
4. **葉ノードの予測値の決定**：最終的な葉ノードでは、そのノードに含まれるデータポイントの目的変数の平
均値が予測値として使用されます。
ルートノードを
最適な分割を決
再帰的に分割す
葉ノードの予測
選択する。
定する。
る。
値を決定する。
### 決定木回帰の特徴：
- **解釈が容易**：決定木は直観的に理解しやすいモデルであり、どのように予測が行われているかを追跡する
ことができます。
- **非線形関係のモデリング**：非線形データに対しても効果的に機能し、複雑なデータ構造を捉えることがで
きます。
- **特徴選択**：関係のない特徴は自然と無視されるため、特徴選択のプロセスが自然に行われます。
MSE方式
ジニ不純物方式
ノード平均値方
式
### 考慮すべき点：
- **過学習**：木が深すぎると、データのノイズまで学習してしまうことがあります。これを防ぐためには枝刈
りが行われます。
- **データの変化に敏感**：小さなデータセットの変更が大きな違いをもたらすことがあります。したがって、
モデルの汎化能力を確保するためには、クロスバリデーションなどの技術が必要です。
決定木回帰は、金融、医療、エネルギー管理など、様々な領域で有用です。データが複雑で、関係が直感的に理
解しにくい場合や、解釈可能なモデルが求められる場合に特に有効です。
図：左の説明の目的と過程を階層構造図としてまとめた。この場合，
「決定木回帰モデル方式」の上位階層はその目的を示す。下位階層は過
程を示す。


# Page. 27

![Page Image](https://bcdn.docswell.com/page/LJLZL6L27R.jpg)

例）決定木手法
ルートノード
ルートノードでの分割ばかり説明をしています。再帰的に分割するはずですが，サブセット
にもルートノードはあるのでしょうか。
ChatGPT4：
はい、決定木での「ルートノード」という用語は通常、木全体の最初のノードを指します。しかし、決
定木の構築では再帰的なプロセスを用いており、各サブセットに対しても同様の分割処理が行われます。
この文脈では、各サブセットの最初のノード（分割を行うノード）も概念的にはそのサブセットにおけ
る「ルートノード」と見なすことができます。
全データ
この部分の分割方法もルート
ノードの分割方法と同じ。
x1&gt;=xvalue1
のデータ
決定木の各ステップでの具体的な処理は以下のように進みます：
1. 最初のルートノード（全データセットを含む）でデータを分割します。
2. 分割によって生成された各サブセットについて、それぞれが新たな小さな決定木のルートノードとな
ります。
3. この小さな決定木（サブセット）に対しても、データをさらに分割するための最適な特徴と閾値を探
します。
4. 各サブセットに対する分割は、再帰的に行われます。つまり、さらに小さなサブセットに分割され、
それぞれに新たなルートノードができます。
5. このプロセスは、予め定められた停止条件（例えば、サブセットのサイズが最小限に達した場合や、
不純度の減少がある閾値以下になった場合など）が満たされるまで続けられます。
木の各レベルでのサブセットのルートノードは、上位のノードから派生した子ノードとして機能します。
この再帰的なプロセスにより、木の枝分かれが形成され、最終的には葉ノード（決定木の末端ノード）
に到達します。葉ノードでは、予測値やクラスラベルが割り当てられます。
決定木におけるこの再帰的な分割プロセスは、全体的な構造を通じて一貫したアプローチで行われるた
め、最初のルートノードでの分割方法と基本的な原理は各サブセットにおける分割と同じです。
x2&gt;=xvalue2
Aのデータ
yvalue1
図：決定木の模式図
X2&lt;xvalue2A
のデータ
yvalue2
x1&lt;xvalue1
のデータ


# Page. 28

![Page Image](https://bcdn.docswell.com/page/47MVM5M97W.jpg)

例）決定木手法
分からない部分を深掘りしていく。
「ルートノードの選択」を詳しく教えてください。
ChatGPT4:「ルートノードの選択」とは、決定木アルゴリズムが最初にデータを分割するスタートポイント
を決めるプロセスを指します。決定木を構築する際には、全てのデータセットを含むルートノードから始め
て、そこからデータを分割していきます。
ルートノードでの分割の決定は、以下のステップで行われます：
1. **特徴選択**：
- データセットに含まれる各特徴（変数）を調べ、それぞれについて分割の質を評価します。
- 分割の質は、データセットの不純度（混合度）を減少させることを目的としています。不純度の指標に
は、分類木でよく使われるジニ不純度やエントロピー、回帰木では平均二乗誤差（MSE）や平均絶対誤差
（MAE）があります。
2. **最適な分割点の探索**：
- 各特徴に対して可能な分割点を評価します。この分割点は、特徴の値の範囲内で選ばれます。
- それぞれの分割点でデータセットを二つの子ノードに分割し、その分割による不純度の減少量を計算し
ます。
3. **最良の特徴と分割点の選択**：
- すべての特徴と分割点について不純度の減少量を比較し、最も大きな不純度の減少をもたらす特徴と分
割点を選びます。
- この最良の分割点が、ルートノードでの分割として選ばれます。
ルートノードの選択は、決定木の構築において最も重要な最初のステップです。この初期分割がデータの構
造をどのように捉えるかによって、最終的なモデルの性能が大きく左右されます。選択されたルートノード
の特徴と閾値は、データの分割と情報の流れの出発点となります。
この過程でモデルの複雑さと性能のバランスをとるために、適切な前処理、特徴選択、および後に述べる枝
刈りなどの技術が鍵となります。
この回答は各項目二つの説明があり，
1. 概要
2. より具体的な説明


# Page. 29

![Page Image](https://bcdn.docswell.com/page/P7R2V3V9J9.jpg)

例）決定木手法
分からない部分を深掘りしていく。
「ルートノードの選択」を詳しく教えてください。
決定木回帰モデル
方式
ChatGPT4:「ルートノードの選択」とは、決定木アルゴリズムが最初にデータを分割するスタートポイント
を決めるプロセスを指します。決定木を構築する際には、全てのデータセットを含むルートノードから始め
て、そこからデータを分割していきます。
ルートノードを選
最適な分割を決定
択する。
する。
再帰的に分割する。
葉ノードの予測値
を決定する。
ルートノードでの分割の決定は、以下のステップで行われます：
1. **特徴選択**：
- データセットに含まれる各特徴（変数）を調べ、それぞれについて分割の質を評価します。
- 分割の質は、データセットの不純度（混合度）を減少させることを目的としています。不純度の指標に
は、分類木でよく使われるジニ不純度やエントロピー、回帰木では平均二乗誤差（MSE）や平均絶対誤差
（MAE）があります。
2. **最適な分割点の探索**：
- 各特徴に対して可能な分割点を評価します。この分割点は、特徴の値の範囲内で選ばれます。
- それぞれの分割点でデータセットを二つの子ノードに分割し、その分割による不純度の減少量を計算し
ます。
全ての特徴量毎最
不純度選択方式
適分割点探索方式
特徴量毎の不純物
回帰不純度方式
減少量と分割点を
分類不純度方式
特徴量を選ぶ。
得る。
MSE方式
ジニ不純物方式
エントロピー
特徴量を選択する。
二つの子ノードに
不純度の減少量を
分割する。
計算する。
ルートノードを分
割する。
最も大きな不純度
分割点を選ぶ。
の減少をもたらす
特徴量選択方式
最も大きな不純度
可能な分割点方式
の減少をもたらす
分割点方式
3. **最良の特徴と分割点の選択**：
- すべての特徴と分割点について不純度の減少量を比較し、最も大きな不純度の減少をもたらす特徴と分
割点を選びます。
- この最良の分割点が、ルートノードでの分割として選ばれます。
ルートノードの選択は、決定木の構築において最も重要な最初のステップです。この初期分割がデータの構
造をどのように捉えるかによって、最終的なモデルの性能が大きく左右されます。選択されたルートノード
の特徴と閾値は、データの分割と情報の流れの出発点となります。
この過程でモデルの複雑さと性能のバランスをとるために、適切な前処理、特徴選択、および後に述べる枝
刈りなどの技術が鍵となります。
図：青色ノードは前ページからの変更点を示す。
•
•
詳細な指示が無いGPT4の説明は冗長で重複が多いので全
体の階層構造が変わるかもしれない。
説明をまとめると，前ページの内容と異なりどうやらこ
うなっている。


# Page. 30

![Page Image](https://bcdn.docswell.com/page/PJXDZ4Z3EX.jpg)

例）決定木手法
事後刈り取り決
定木回帰モデル
を学習する
木構造を単
純化する。
事後枝刈り
を行う。
決定木回帰モデ
ルを学習する。
枝刈りの技術とは何ですか。
過学習を逃
れる。
ルートノードを
最適な分割を決
再帰的に分割す
葉ノードの予測
選択する。
定する。
る。
値を決定する。
検証セットに対する誤差が最
小となるようなサブツリーを
選ぶ。
全ての特徴量毎
ChatGPT4:決定木の枝刈り（pruning）は、過学習を防ぎ、モデルの汎化能力を高めるための手法です。決定木が
トレーニングデータに対して過剰にフィットすると、新しい未知データに対する予測性能が低下することがありま
す。これを避けるために、木の成長を適切な時点で停止したり、既に成長した木から一部の枝を削除したりします。
枝刈りには主に二つのアプローチがあります：
1. **事前枝刈り（Pre-pruning）**：
- 木の成長が完了する前に枝刈りを行います。
- 成長の早い段階で、分割による不純度の減少が小さい（あるいは改善が一定の閾値以下で）場合にはその分割
を行わないようにします。
- 最大の深さ、最小分割サンプル数、あるノードの最小不純度減少量などのパラメータを設定することで制御し
ます。
2. **事後枝刈り（Post-pruning）または剪定**：
- 木を完全に成長させた後で不要な枝を取り除きます。
- コスト複雑性剪定（Cost-complexity pruning）は、一般的な事後枝刈りの手法で、木のサイズにペナルティを
課して複雑さを制限します。これにより、木の構造が単純化され、過学習が防がれます。
- 枝刈りは、検証セット上での性能を評価しながら行われることが多く、検証セットに対する誤差が最小となる
ようなサブツリーが選択されます。
枝刈りは慎重に行う必要があり、適切なパラメータのチューニングが求められます。事前枝刈りは計算コストを抑
える効果もありますが、あまりに早く枝刈りを行うと、重要な分割が見逃される可能性があります。一方で、事後
枝刈りはより洗練されたモデルを生成する可能性がありますが、計算コストが高くなる傾向があります。適切なバ
ランスを見つけることが、効果的な決定木モデルを構築する鍵です。
最適分割点探索
不純度選択方式
方式
特徴量毎の不純
回帰不純度方式
物減少量と分割
分類不純度方式
特徴量を選ぶ。
点を得る。
MSE方式
ジニ不純物方式
エントロピー
特徴量を選択す
二つの子ノード
不純度の減少量
る。
に分割する。
を計算する。
分割点を選ぶ。
ルートノードを
分割する。
最も大きな不純度の減
少をもたらす特徴量選
択方式
可能な分割点方
式
最も大きな不純
度の減少をもた
らす分割点方式
事前枝刈り
方式
分割による不純度の減
少が小さい（あるいは
改善が一定の閾値以下
で）場合にはその分割
を行わない。
最大深さ方
式
最小分割サンプル
数方式
あるノードの最小
不純度減少方式量
図：青色ノードは前ページからの変更点を示す。
• 図に説明を追加した。
• 理解度に合わせて階層図の再構築を行う。


# Page. 31

![Page Image](https://bcdn.docswell.com/page/3JKX8Z8NED.jpg)

例）交差検定ライブラリ
Scikit-learnの交差検定関係クラス・関数が多数存在
する。
それらをまとめてもらう。


# Page. 32

![Page Image](https://bcdn.docswell.com/page/LE352D2ZJ5.jpg)

LLMの利用
LLMにより問題
を解決する。
LLMにより知識
LLMによりコー
を得る。
ドを書く。
LLMにより
scikit-learnの知
識を得る


# Page. 33

![Page Image](https://bcdn.docswell.com/page/8EDDZPZ4EG.jpg)

Scikit-learn関数の説明
公式documentは関数の説明であり，
関数の説明は関数の「全て」を説明する。
そのため初心者はどこが重要なのか分からない。
全部理解しないと使えない，のでは初心者はいつま
でたっても使えない。
図：scikit-learnのドキュメントより。cross_val_score
の説明。


# Page. 34

![Page Image](https://bcdn.docswell.com/page/V7PXDNDVE8.jpg)

Scikit-learn関数の説明
User: scikit-learnのcross_val_scoreを説明してください。
ChatGPT4
scikit-learnの `cross_val_score` は、交差検証を行いながら機械学習モデルの性能
を評価するための便利な関数です。以下に `cross_val_score` の主要な概念と役割を
説明します。
`cross_val_score` 関数の主要なパラメータ:
- `estimator`: 評価したい機械学習モデル（分類器や回帰モデルなど）を指定します。
- `X`: 特徴量のデータセット。
- `y`: 目的変数のデータセット。
- `cv`: 交差検証の方法を指定するパラメータ。通常は整数（例: 5）や交差検証の分
割方法（例: `KFold(n_splits=5)`）を指定します。
- `scoring`: モデルの性能評価指標を指定するパラメータ。分類問題の場合はF1スコ
アや正解率、回帰問題の場合は平均二乗誤差（MSE）などを指定できます。
例:
```python
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
# RandomForestClassifierを用意
model = RandomForestClassifier()
# 5分割交差検証でモデルを評価し、正解率を評価指標として使用
scores = cross_val_score(model, X, y, cv=5, scoring=&#039;accuracy&#039;)
# 各交差検証ステップでの正解率を表示
print(&quot;Cross-Validation Scores:&quot;, scores)
`cross_val_score` の動作:
1. データセットを指定された交差検証の方法（例: k-Fold Cross-Validation）に従っ
て分割します。
2. 分割された各セットに対して、指定された機械学習モデル（estimator）をトレー
ニングデータでトレーニングし、テストデータで性能を評価します。
3. 交差検証の各ステップで得られた性能評価スコアを返します。
# 平均正解率を計算
mean_accuracy = scores.mean()
print(&quot;Mean Accuracy:&quot;, mean_accuracy)
```
`cross_val_score` の出力:
- `cross_val_score` は、各交差検証ステップでの性能評価スコアの配列（またはリ
スト）を返します。
- 通常、これらのスコアの平均値や標準偏差を計算してモデルの性能を評価します。
このように、`cross_val_score` を使用することで、モデルの性能を信頼性
の高い方法で評価できます。交差検証によって、過学習を防ぎ、モデルの一
般化性能を評価できるため、モデルの選択やハイパーパラメータの調整に役
立ちます。


# Page. 35

![Page Image](https://bcdn.docswell.com/page/2JVL1K1R7Q.jpg)

Scikit-learn関数の説明
User: scikit-learnのcross_val_scoreを説明してください。
ChatGPT4
scikit-learnの `cross_val_score` は、交差検証を行いながら機械学習モデルの性能
を評価するための便利な関数です。以下に `cross_val_score` の主要な概念と役割を
説明します。
`cross_val_score` 関数の主要なパラメータ:
- `estimator`: 評価したい機械学習モデル（分類器や回帰モデルなど）を指定します。
- `X`: 特徴量のデータセット。
- `y`: 目的変数のデータセット。
- `cv`: 交差検証の方法を指定するパラメータ。通常は整数（例: 5）や交差検証の分
割方法（例: `KFold(n_splits=5)`）を指定します。
- `scoring`: モデルの性能評価指標を指定するパラメータ。分類問題の場合はF1スコ
アや正解率、回帰問題の場合は平均二乗誤差（MSE）などを指定できます。
例:
```python
from sklearn.model_selection import cross_val_score
from sklearn.ensemble import RandomForestClassifier
# RandomForestClassifierを用意
model = RandomForestClassifier()
# 5分割交差検証でモデルを評価し、正解率を評価指標として使用
scores = cross_val_score(model, X, y, cv=5, scoring=&#039;accuracy&#039;)
# 各交差検証ステップでの正解率を表示
print(&quot;Cross-Validation Scores:&quot;, scores)
`cross_val_score` の動作:
盲目的に使うのではなく，cross_val_score(cv=5)の動作は調
1. データセットを指定された交差検証の方法（例:
k-Fold Cross-Validation）に従っ
て分割します。
べないといけない。
2. 分割された各セットに対して、指定された機械学習モデル（estimator）をトレー
例えば，cv=数字のdefault動作はKfoldのdefault動作で乱数
ニングデータでトレーニングし、テストデータで性能を評価します。
で並び替えしない。
3. 交差検証の各ステップで得られた性能評価スコアを返します。
# 平均正解率を計算
mean_accuracy = scores.mean()
print(&quot;Mean Accuracy:&quot;, mean_accuracy)
```
`cross_val_score`
の出力:
ない。
- `cross_val_score` は、各交差検証ステップでの性能評価スコアの配列（またはリ
スト）を返します。
- 通常、これらのスコアの平均値や標準偏差を計算してモデルの性能を評価します。
このように、`cross_val_score` を使用することで、モデルの性能を信頼性
の高い方法で評価できます。交差検証によって、過学習を防ぎ、モデルの一
般化性能を評価できるため、モデルの選択やハイパーパラメータの調整に役
立ちます。
暗黙知でありLLMの回答はハルシネーションによる誤りでは


# Page. 36

![Page Image](https://bcdn.docswell.com/page/5EGX2Q26JL.jpg)

Scikit-learn関数の説明
cross_val_score
estimator
X
y
cv
cv=5
scoring
cv=KFold(5)
・・・
KFoldのdefault動作の説明
はもっと下位の階層にある。
図：cross_val_scoreの主要パラメタ階層構造


# Page. 37

![Page Image](https://bcdn.docswell.com/page/4JQ8PKP27P.jpg)

Scikit-learn関数の説明
scores = cross_val_score(model, X, y, cv=5,
scoring=&#039;accuracy&#039;)
の場合交差検定でX，ｙの乱数による並び替えを行いますか。
知識が無いと質問できない。
Microsoft Copilot
cross_val_score関数はデフォルトではデータの並び替
えを行いません。データはそのままの順序で使用さ
れます。しかし、cvパラメータにKFoldや
StratifiedKFoldなどの交差検証オブジェクトを渡すこ
とで、データのシャッフルを制御することができま
す。例えば、以下のように使用することができま
す：
from sklearn.model_selection import KFold
kf = KFold(n_splits=5, shuffle=True, random_state=0)
scores = cross_val_score(model, X, y, cv=kf,
scoring=&#039;accuracy’)
…


# Page. 38

![Page Image](https://bcdn.docswell.com/page/K742YPYPJ1.jpg)

Scikit-learn関数の説明
User: scikit-learnのcross_val_scoreを説明してください。
注意すべき点も教えてください。
Microsoft Copilot
`scikit-learn`の`cross_val_score`は、交差検証によるモデルの評価を行う関数です¹。
具体的には以下のようなパラメータを持っています¹:
- `estimator`: データをフィットするために使用するオブジェクト。
- `X`: フィットするデータ。リストや配列などが可能。
- `y`: 教師あり学習の場合に予測しようとする目標変数。
- `groups`: データセットを訓練セットとテストセットに分割する際に使用するサンプル
のグループラベル。
- `scoring`: モデル評価のための文字列または呼び出し可能オブジェクト。
- `cv`: 交差検証の分割戦略を決定します。
- `n_jobs`: 並列実行するジョブの数。
- `verbose`: 冗長性レベル。
- `fit_params`: 推定器のfitメソッドに渡すパラメータ。
- `pre_dispatch`: 並列実行中にディスパッチされるジョブの数を制御します。
- `error_score`: 推定器のフィッティングでエラーが発生した場合にスコアに割り当てる
値。
注意すべき点としては、`cross_val_score`はデータセットを複数の
フォールドに分割し、それぞれのフォールドでモデルを訓練して評価
します²。そのため、データの分割方法や分割数（`cv`パラメータ）に
よって結果が変わる可能性があります²。また、`n_jobs`パラメータを
調整することで、並列実行するジョブの数を制御できますが、ジョブ
が多すぎるとメモリ消費が増える可能性があるため注意が必要です¹。
さらに、`cross_val_score`は単一の評価指標しか許可されていないた
め、複数の評価指標を同時に使用したい場合は`cross_validate`を使用
すると良いでしょう¹。最後に、評価指標（`scoring`パラメータ）が
Noneの場合、推定器のデフォルトのスコアラーが使用されます¹。
…
→パラメタの説明が増えるし，注意点も
多すぎて理解しにくい。
KFoldの並び替えについては触れられない。


# Page. 39

![Page Image](https://bcdn.docswell.com/page/LJ1M696XEG.jpg)

LLMの利用
現在のLLMとの付き合い方
人が誤解する
LLMが正しい知識（回答）を全て教えてくれるのではないの
で鵜呑みにしてはいけない。
回答
ハルシネー
ション
誤った回答
暗黙知
省略により誤
解させる回答
図：人が誤解するLLMの回答。
•
•
LLMは知識獲得・問題解決の支援を行うだけ。
LLMの回答をユーザーが自分でまとめ直す必要もある。
（LLMはその支援も行える。）
現状ではユーザーが最低限の知識を持ち，
ユーザーがLLMの回答を取捨選択する。
ユーザー側に「明確な質問」と「問題解決のためのおおまか
な戦略」が無いとLLMはうまく使えない。


# Page. 40

![Page Image](https://bcdn.docswell.com/page/GJW3WQWKJ2.jpg)

今回の内容
内容
Pythonモ
ジュールの紹
介
データの紹介
LLMの利用


# Page. 41

![Page Image](https://bcdn.docswell.com/page/4EZV5W5NJ3.jpg)

以上です。


