6K Views
January 22, 24
スライド概要
マテリアルズ・インフォマティクス連続セミナー
レポジトリ:https://bitbucket.org/kino_h/python_mi_seminar_2023rev2/src/main/
マテリアルズインフォマティクスチュートリアル
マテリアルズ・インフォマティクス 連続セミナー 回帰 木野日織(きのひおり)
ページ・ページ上部の色 Outline LLM利用(知識) Pythonコード LLM利用 (Pythonコード)
今回の内容 内容 Scikit-learn回 帰手法の紹介 LLM支援による プログラミング
Scikit-learn • 2023/1/1の最新版versin 1.3.2で動作確認をしています。 • Versionが変わると動作しない可能性があります。 ご了承ください。
Scikit-learnの使い方 基本的な使い方が統一されています。 回帰・分類・クラスタリング reg = LinearRegression(…) reg.fit(X,y) yp =reg.predict(X) 規格化・次元圧縮 dr = PCA(…) dr.fit(X) Xtransformed =dr.transform(X) dr.fit_transform(X) としか呼べないクラスも あります。
回帰モデル:予測モデル学習と未知データへの適用 未知データに対 して予測する 未知データに対 して予測値を得 る 予測モデルを得 る 観測データを収 集する 観測データを加 工する 予測モデルを学 習する 未知データを収 集する 未知データを加 工する 予測モデルで未 知データに対し て予測値を得る
回帰予測モデル 予測モデルを学習 する プログラム組み合 わせ方式 ハイパーパラメタ を幾つか選ぶ 観測データ分割を 行う 既存関数方式 モデル当てはめを 行う 一組の訓練・テス トデータ 交差検定 train_test_split KFold 線形回帰モデル LinearRegression Lasso モデル評価を行う カーネル法 Ridge KernelRidge モデルを選択する 交差検定で線形回 帰モデルを作る LassoCV RidgeCV 交差検定で一般的 な回帰モデルを作 る GridSearchCV
例1 レポジトリ内のファイル 010.regression/ 010.050.text.linear_regression.ipynb 010.055.text.linear_regression-CV.ipynb 010.060.text.RETM-KR.ipynb 010.110.answer.linear_regression.ipynb … • • • • トイモデル Z-score Normalization 線形回帰モデル 一組の訓練・テストデータに分割
010.050 予測モデルを学習 する プログラム組み合 わせ方式 ハイパーパラメタ を幾つか選ぶ 観測データ分割を 行う 既存関数方式 モデル当てはめを 行う 一組の訓練・テス トデータ分割方式 交差検定方式 train_test_split KFold 線形回帰モデル方 式 LinearRegression Lasso モデル評価を行う カーネル法方式 Ridge 目的:これらの関数の利用法を知ること。 KernelRidge モデルを選択する 交差検定で線形回 帰モデルを作る LassoCV RidgeCV 交差検定で一般的 な回帰モデルを作 る GridSearchCV
回帰モデル:学習 未知データに 対して予測す る 予測モデルを 得る 観測データを 収集する ファイル x5_sin.csvを 読み込む 観測データを 加工する 生観測データ 規格化関数を を得る 作成する 未知データに 対して予測値 を得る 予測モデルを 学習する 結果の解釈 を行う
観測・未知データ取得 x1 x2 x3 x4 x5 x6 y 𝑥Ԧ = (𝑥, 𝑥 2 , 𝑥 3 , 𝑥 4 , 𝑥 5 , sin 𝑥 ) 𝑦 = sin 𝑥 + 𝑁(0, 𝑠𝑐𝑎𝑙𝑒 2 ) 𝑁(𝜇, 𝑠𝑐𝑎𝑙𝑒 2 ): 平均𝜇, 分散𝑠𝑐𝑎𝑙𝑒 2の正規分布。 観測データ:x5_sin.csv 未知データ:x5_sin_new.csv
回帰モデル:学習 未知データに 対して予測す る 予測モデルを 得る 観測データを 収集する ファイル x5_sin.csvを 読み込む 観測データを 加工する 生観測データ 規格化関数を を得る 作成する 未知データに 対して予測値 を得る 予測モデルを 学習する 結果の解釈 を行う
データ取得 Jupyter notebookのセル番号 説明変数,目的変数 カラムの設定 データファイルの読 み込み 生観測データを得る 説明変数 Xraw 目的変数 y
変数名定義(1) 説明変数 生説明変数 Xraw 加工済み説 明変数X 説明変数 Xtrain 説明変数 Xtest
変数名定義(2) 目的変数 観測データ目 的変数 訓練データ ytrain テストデータ ytest 目的変数予測 値 訓練データ ytrainp テストデータ ytestp 最後にpを加える。
データ加工 1 2 3 4 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() データ加工 scaler.fit(Xraw) Z-score Normalizationによる規格化のみ行う。 X = scaler.transform(Xraw)
予測モデル学習の各過程 予測モデルを学 習する 1. 観測データ 分割を行う 2. モデル当て はめを行う 3. モデル評価 を行う 4. モデルを選 択する 訓練データ・テ ストデータに分 ける 訓練データに対 してある関数を 最適化する テストデータに 対して性能評価 指標値を得る 性能評価指標値 から妥当なモデ ルを選択する。 (階層構造の一例)
一組の訓練データ、テストデータへの分割 train_test_split テストデータサイ ズ指定方法 test_size={割合} ランダム分割指定 方法 shuffle=True 目的:毎回、同 じ結果を得る random_state={整 数} スクリプトの毎実行同じ乱数でランダムに分け、テストデータ=観測データの25%とする。 from sklearn.model_selection import train_test_split Xtrain, Xtest, ytrain, ytest = train_test_split(X, y, test_size=0.25, shuffle=True, random_state=1)
予測値生成 回帰 モデル当て はめ 予測値作成 .fit() .predict()
モデル当てはめ 罰則項が無い線形回帰モデル 訓練データを用いて 回帰モデル当てはめ を行い。 訓練データの テストデータの 予測値を生成する。
モデル当てはめ モデルができたので回帰係数と切片が求まっている。 それらの表示を行う。
予測モデルの性能評価 テストデータを用いた評価指標値RMSE, MAE, R2 の値を得る。 (RMSEは√𝑀𝑆𝐸 とする。)
回帰モデル:未知データへの適用 結果の解釈 を行う 未知データに対 して予測する 未知データに対 して予測値を得 る 予測モデルを得 る 観測データを収 集する ファイル x5_sin.csvを読 み込む 生観測データを 得る 観測データを加 工する 観測データから 学習する 規格化関数を作 成する reg変数 未知データを収 集する ファイル x5_sin_new.csv を読み込む 生未知データを 得る 未知データを加 工する 予測モデルで未 知データに対し て予測値を得る 規格化関数を適 用する reg変数 適用 (データ作成) scaler変数 scaler変数 適用
新規データへの適用 「未知データ」→データがある場合は「新規データ」と読み替える。 新規データを含むファイルを読む。 新規データ生説明変数 Xraw_new 新規データ目的変数 ynew (答え合わせの ために新規データ目的変数がある。) データ加工 観測モデル変換と同じ scaler で説明変 数を変換する 同じ回帰モデルで、新規データ目的変数予 測値を生成する
結果解釈 未知データに 対して予測す る 予測モデルを 得る 未知データに 対して予測値 を得る 結果の解釈 を行う
結果解釈:観測データの規格化前後可視化 図:左)生観測データ説明変数と右)規格化後 観測データ説明変数
結果解釈:観測データと新規データの可視化 横軸 縦軸 新規データ 観測データ 外挿領域 図:XとXnewをx1に対して図示。
結果解釈:訓練データ・テストデータ分割の可視化 訓練(・) テスト(○) 観測データのうち訓練データでないデータがテス トデータになる。 図:xtrainとxtest
観測データ、新規データ予測値の可視化 訓練データとテストデータ 新規データ 横軸:目的変数観測値, 縦軸:予測値
LLMによるコード生成 言語詳細を理解しなくても,過程を詳細に説明できれば LLMを利用してソースコードが書けます。 Pythonコード生成例を示します。
LLMによるコード生成 1.(当たり前ですが)ユーザーが何 をしたいのかという過程を理解してい ないと書けない。 「未知データに対して予測する。」を行いたい。 結果の解釈を 行う 未知データに対し て予測する Q.どの程度まで過程を理解する必要 があるのか? A.場合による。 観測データを収集 する 2.LLMは目的を記載すると入力を 補完してコードを生成できます。 初心者向けの機械学習手法であれば多 くの場合に問題なく入力を補完します。 3.変数名の指定も可能。 未知データに対し て予測値を得る 予測モデルを得る ファイル x5_sin.csvを読み 込む (データ作成) 生観測データを得 る 観測データを加工 する 観測データから学 習する 規格化関数を作成 する reg変数 scaler変数 未知データを収集 する ファイル x5_sin_new.csvを 読み込む 生未知データを得 る 未知データを加工 する 予測モデルで未知 データに対して予 測値を得る 規格化関数を適用 する reg変数 scaler変数 図:既出の「未知データに対すて予測する」の達成手法とその過程
LLMによるコード生成 LLMが妥当なコードを生成できない指示であれば,それらの箇所をより詳細に記述する。 図の「未知データに対して予測する」は(a)-(c)までそれなりのコードを書けます。 (a) 結果の 解釈を 行う 未知デー タに対し て予測す る 未知デー タに対し て予測値 を得る 予測モデ ルを得る 観測デー タを収集 する ファイル x5_sin.c svを読み 込む (データ 作成) 生観測 データを 得る 観測デー タを加工 する 観測デー タから学 習する 規格化関 数を作成 する reg変数 scaler変 数 未知デー タを収集 する ファイル x5_sin_n ew.csvを 読み込む 生未知 データを 得る 未知デー タを加工 する 規格化関 数を適用 する (b) 結果の 解釈を 行う 未知デー タに対し て予測す る 予測モデ ルで未知 データに 対して予 測値を得 る reg変数 scaler変 数 User:未知データに対して予測するPythonコード を作成してください。 未知デー タに対し て予測値 を得る モデルを 予測得る 観測デー タを収集 する ファイル x5_sin.c svを読み 込む (データ 作成) 生観測 データを 得る 観測デー タを加工 する 観測デー タから学 習する 規格化関 数を作成 する reg変数 scaler変 数 未知デー タを収集 する ファイル x5_sin_n ew.csvを 読み込む 生未知 データを 得る 未知デー タを加工 する 規格化関 数を適用 する (c) 結果の 解釈を 行う 未知デー タに対し て予測す る 予測モデ ルで未知 データに 対して予 測値を得 る reg変数 scaler変 数 User:以下の過程に沿ってPythonコードを作成 してください。 1.回帰予測モデルを得る。 2.未知データに対して予測値を得る。 未知デー タに対し て予測値 を得る モデルを 予測得る 観測デー タを収集 する ファイル x5_sin.c svを読み 込む (データ 作成) 生観測 データを 得る 観測デー タを加工 する 観測デー タから学 習する 規格化関 数を作成 する reg変数 scaler変 数 未知デー タを収集 する ファイル x5_sin_n ew.csvを 読み込む 生未知 データを 得る 未知デー タを加工 する 規格化関 数を適用 する 予測モデ ルで未知 データに 対して予 測値を得 る reg変数 scaler変 数 User:以下の過程に沿ってPythonコードを作成してく ださい。 1.回帰予測モデルをを得るため1.X.の過程を行 う。 1.1.観測データを収集する。 1.2.観測データを加工する。 1.3.観測データから学習する。 2.未知データに対して予測値を得る。 図:既出の「未知データに対して予測する」の達成手法とその過程の詳細(オレンジ色)を徐々に明示する。(a)が不十分であれば(b)を,(b)が不十分であれば(c)を記載 する。
LLMの選択とコード作成方法 初心者はGPT4の利用を薦めます。 GPT4相当LLM LLMによるコード 生成 Pythonコード実 行環境とコード修 正あり Pythonコード実 Userコード無しに UserコードをLLM 行環境なし からコードを作る。 が修正する。 ChatGPT4(Data ChatGPT Classic Analystもしくは (プラグインな プラグイン。) し) LLMが全部作る。 Microsoft Copilot 図:Python実行環境に関するGPT4相当LLMの分類例。Pythonコード実行環境と 修正ありの場合はプログラムを実行してエラーの修正を自動的に行う。実行する ために,簡単なデータを与える。もしくはLLMがデータを取得することができる。 LLMが部分的に作 る。 LLMが動作する コードの一部を変 える。 図:LLMによるコード生成方法の分類例。使用する変数の指 定も(ある程度)可能。
LLMの説明を利用したコード生成 LLMの言葉使いを知る。その指示でソースコードを生成させる。 1.ソースコードから説明の生成: ソースコード LLMの説明 LLMの説明の仕方を知る。 2.LLMの説明を利用したコード生成: LLMの説明をプロンプトにする。 ソースコード生成 図:LLMの用語を理解するためのLLMの説明を利用したソースコード生成過程
ソースコードから説明の生成:例1 ChatGPT4: You: 私はscikit-learnの初心者です。 Xrawとyはすでに与えられています。 以下のプログラムを200文字以内で説明してください。 ``` from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaler.fit(Xraw) X = scaler.transform(Xraw) from sklearn.model_selection import train_test_split Xtrain, Xtest, ytrain, ytest = ¥ train_test_split(X, y, test_size=0.25, shuffle=True, random_state=1) from sklearn.linear_model import LinearRegression reg = LinearRegression() reg.fit(Xtrain, ytrain) print("coef", reg.coef_) print("intercept", reg.intercept_) ytrainp = reg.predict(Xtrain) ytestp = reg.predict(Xtest) ``` このプログラムは、データの前処理、分割、線形回帰モデルの訓練と評価を行う手順 を示しています: 1. **標準化:** `StandardScaler`を用いて、特徴データ`Xraw`を標準化します。これにより、 データのスケールを平均0、標準偏差1に調整します。 2. **データ分割:** `train_test_split`で、標準化されたデータ`X`と目的変数`y`を訓練用と テスト用に分割します。テストセットは全体の25%で、ランダムにシャッフルされます。 3. **線形回帰モデルの訓練:** `LinearRegression`を使って線形回帰モデルを作成し、訓 練データにフィットさせます。 4. **モデルの係数と切片の出力:** 訓練されたモデルの係数と切片を出力します。 5. **予測:** モデルを使って、訓練データとテストデータの両方に対する予測を行いま す。
説明の図示 結果の解釈を 行う 未知データに 対して予測す る 図に例1の過程の表示を行う。 未知データに 対して予測値 を得る 予測モデルを 得る 詳細レベルで過程を表示している。 観測データを 収集する ファイル x5_sin.csvを 読み込む 生観測データ を得る 観測データを 加工する 観測データか ら学習する 規格化関数を 作成する して学習する。 予測モデルと 未知データを 収集する ファイル x5_sin_new.cs vを読み込む 生未知データ を得る 未知データを 加工する 予測モデルで 未知データに 対して予測値 を得る 規格化関数を 適用する reg変数 一組の訓練 (データ作成) scaler変数 データテスト データに分割 する。 reg変数 予測モデルの 表示 一組の訓練データテ ストデータに対して 予測値を作成する。 StandardScale train_test_spli LinearRegress r t ion 図:例の過程の表示。 scaler変数
LLMの説明を利用したコード生成 以下のPythonコードを書いてください。 ChatGPT4 (ソースコード部分のみ) 1. **標準化:** `StandardScaler`を用いて、特徴データ`Xraw`を標準化しま す。これにより、データのスケールを平均0、標準偏差1に調整します。 2. **データ分割:** `train_test_split`で、標準化されたデータ`X`と目的変数 `y`を訓練用とテスト用に分割します。テストセットは全体の25%で、ラ ンダムにシャッフルされます。 from sklearn import datasets from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # データセットのロード Xraw, y = datasets.load_diabetes(return_X_y=True) 3. **線形回帰モデルの訓練:** `LinearRegression`を使って線形回帰モデル を作成し、訓練データにフィットさせます。 # 標準化 scaler = StandardScaler() X = scaler.fit_transform(Xraw) 4. **モデルの係数と切片の出力:** 訓練されたモデルの係数と切片を出力 します。 # データ分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, shuffle=True, random_state=1) 5. **予測:** モデルを使って、訓練データとテストデータの両方に対する 予測を行います。 # 条件 データセットは Diabetes datasetを用いてください。 回帰用データ セットの追加 依頼 データセットを明示しないとboston housing データセッ トがよく使われるが,それはすでにobsoleteなので別の データセットを指示する。 # 線形回帰モデルの訓練 reg = LinearRegression() reg.fit(X_train, y_train) # モデルの係数と切片の出力 print("coef", reg.coef_) print("intercept", reg.intercept_) # 予測 y_train_pred = reg.predict(X_train) y_test_pred = reg.predict(X_test) # 予測結果の先頭5つを表示(参考のため) y_train_pred[:5], y_test_pred[:5]
コード実行 データ( Xraw, Y)を入れ替えて実行。 コード(010.051.LLM)
ソースコードから説明の生成:例2 以下のコードが行っていることを説明してください。 ``` fig, axes = plt.subplots(1, 2) axes[0].plot(Xraw[:,0],Xraw[:,1:], ".-") axes[1].plot(X[:,0],X[:,1:], ".-") plt.xlabel("x1") plt.ylabel("y") ``` ChatGPT4 このコードは、2つのサブプロットを持つ図を作成しています。`Xraw` は規格 化されていない説明変数で、`X` は規格化された説明変数です。どちらも二次 元の行列です。 - `axes[0].plot(Xraw[:,0], Xraw[:,1:], ".-")`: 最初のサブプロットでは、`Xraw` の最初の列(`Xraw[:,0]`)を x 軸の値として、それ以外の列(`Xraw[:,1:]`) を y 軸の値としてプロットしています。点と線で接続されています。 - `axes[1].plot(X[:,0], X[:,1:], ".-")`: 二番目のサブプロットでは、同様に標準化 されたデータ `X` の最初の列を x 軸に、それ以外の列を y 軸にプロットしてい ます。 `plt.xlabel("x1")` と `plt.ylabel("y")` で x 軸と y 軸にラベルを設定しています が、これらの関数は図全体に対してラベルを設定するため、図のどのサブプ ロットにも特定のラベルは適用されません。正確に各サブプロットにラベルを 適用するには、`axes[i].set_xlabel()` と `axes[i].set_ylabel()` を使う必要があ ります。 要するに、コードは2つの特徴量を使った散布図をそれぞれのサブプロットにプ ロットし、1つは規格化前、もう1つは規格化後のデータを比較しています。 図:010.050の左のコードにより生成された図。
LLMの説明を利用したコード生成 ChatGPT4 (ソース部分のみ) 以下のPythonコードを生成してください。 2つのサブプロットを持つ図を作成します。`Xraw` は規格 化されていない説明変数で、`X` は規格化された説明変数 です。どちらも二次元の行列です。 最初のサブプロットでは、`Xraw` の最初の列 (`Xraw[:,0]`)を x 軸の値として、それ以外の列 (`Xraw[:,1:]`)を y 軸の値としてプロットしています。点 と線で接続されています。 二番目のサブプロットでは、同様に標準化されたデータ `X` の最初の列を x 軸に、それ以外の列を y 軸にプロット しています。 x 軸と y 軸にラベルを設定してください。 # 必要なライブラリをインポートします。 import matplotlib.pyplot as plt from sklearn import datasets from sklearn.preprocessing import StandardScaler # データセットをロードします。 Xraw, y = datasets.load_diabetes(return_X_y=True) データ収集・ データ加工部分 # 標準化を実施します。 scaler = StandardScaler() X = scaler.fit_transform(Xraw) # 図を作成し、2つのサブプロットを用意します。 fig, axes = plt.subplots(1, 2, figsize=(12, 6)) # 最初のサブプロットにXrawの最初の特徴量をx軸に、残りの特徴量をy軸にプロットします。 axes[0].plot(Xraw[:, 0], Xraw[:, 1:], ".-") axes[0].set_xlabel("Xraw Feature 1") axes[0].set_ylabel("Other Features") # 2番目のサブプロットに標準化後のXの最初の特徴量をx軸に、残りの特徴量をy軸にプロットします。 axes[1].plot(X[:, 0], X[:, 1:], ".-") axes[1].set_xlabel("Standardized Feature 1") axes[1].set_ylabel("Other Features") 可視化部分。 # 図を表示します。 plt.tight_layout() plt.show()
コード実行 010.051に可視化部分コードのみを加えて実行 する。 右側の図:010.050とほぼ同じ図が作成される。 更に適切なxlabel, ylabelが記載された。 図: 010.051 でのXraw,Xの可視化
LLMによるコード生成まとめ • LLMは動作するはずのコードを作るので 不明な部分を’平均的な過程’で補完する。 大雑把な指示は適当な過程を生成をするので,意 図と粉なっていたら,細かい過程の記載を追加す る。 (当たり前ですが)何をしたいのかを人が 明確に理解している必要がある。複雑にな るほど明確かつ詳細に指示を書いてLLMを 導く必要がある。 人が LLMが 人が 詳細なプロンプト 多くの部分を妥 当に生成 生成後に少ない 修正 簡単なプロンプト 少しの部分を妥 当に生成 生成後に多くの 修正 図:人とLLMの作業量を表した。 人に十分が知識があればLLMを利用したエディ ターを有効に利用できる。
例2 レポジトリ内のファイル 010.regression/ 010.050.text.linear_regression.ipynb 010.055.text.linear_regression-CV.ipynb 010.060.text.RETM-KR.ipynb 010.110.answer.linear_regression.ipynb … • • • • トイモデル Z-score Normalization Lasso 交差検定で訓練・テストデータに分割
010.055 予測モデルを学習 する プログラム組み合 わせ方式 ハイパーパラメタ を幾つか選ぶ 観測データ分割を 行う 既存関数方式 モデル当てはめを 行う 一組の訓練・テス トデータ 交差検定 train_test_split KFold 線形回帰モデル LinearRegression Lasso モデル評価を行う カーネル法 Ridge 目的:これらの関数の利用法を知ること。 KernelRidge モデルを選択する 交差検定で線形回 帰モデルを作る LassoCV RidgeCV 交差検定で一般的 な回帰モデルを作 る GridSearchCV
交差検定: KFold KFold 交差検定回数 n_splits={回数} 分割指定方法 ランダム 非ランダム 目的:X,yの並び 方を乱数で変える。 shuffle=True random_state={整 数} Default shuffle=False kf = KFold(n_splits=5, shuffle=True, random_state=1) 目的:ランダム時 に毎回、同じ結果 を得る
交差検定 4番目のセル
交差検定部分 score_function=r2_score [4] N_SPLITS回,ランダムに並び替え る,乱数状態=1 N_SPLITS変数で指定した回数だけ for loopが行われる。 train, test は各回の訓練・テス トデータのインデックスが入る。 交差検定の各回の訓練データとテストデー タのスコアをリストに加える。 あるalphaに対する 訓練データとテストデータtrain_score, test_scoreの平均値と標準偏差をリストに 加える。
罰則項有り線 形回帰モデル Lasso L1罰則項 L2罰則項 Lasso Ridge インスタンス を作成する モデル当ては めるを行う 予測値を作成 する ハイパーパラ メタ .fit() .predict() alpha={実数} Ridge回帰も同じ。
交差検定部分 インスタンス作成時に alphaを指定する。 [4] モデルあてはめ 予測値作成
Lassoのハイパーパラメタループ部分 alpha_list = np.logspace(-5, 2, 20) # 用いる alpha の値のリスト test_score_list = [] # alphaのループを行う。 for alpha in alpha_list: ハイパーパラメタの可能性を 全て探索する=網羅(brute force)探索 # 各アルファで交差検定を行う。 kf = KFold(n_splits=N_SPLITS, shuffle=SHUFFLE, random_state=1) for train, test in kf.split(X): Xtrain, ytrain = X[train], y[train] … test_score_list.append([np.mean(cv_test_score_list), np.std(cv_test_score_list), alpha]) 交差検定 部分
結果解釈:可視化 (略) 回帰評価値は𝑅 2 (𝑡𝑒𝑠𝑡)~0.999 for log10 (𝛼) < −2 図:[7]で作成された図を示す。
交差検定 5分割の場合 𝒙 𝑦 𝒙1 𝑦1 𝒙𝟐 𝑦2 𝒙𝟑 𝑦3 𝒙𝟒 𝑦4 𝒙𝟓 𝑦5 𝒙𝟔 𝑦6 𝒙7 𝑦7 𝒙8 𝑦8 𝒙9 𝑦9 𝒙10 𝑦10 𝒙11 𝑦11 訓練 データ #1 𝐿の 最適化 #2 回帰 モデル #3 テスト データ #4 評価 指標値 #5 #2,#3, #1,#3, #1,#2, #1,#2, #1,#2, #4,#5 #4,#5 #4,#5 #3,#5 #3,#4 𝑓2345 (𝑥) Ԧ #1 score1 𝑓1234 (𝑥) Ԧ 𝑓1245 (𝑥) Ԧ 𝑓1345 (𝑥) Ԧ #2 score2 𝑓1235 (𝑥) Ԧ #3 score3 #4 #5 score4 ave(score), stddev(score) score5
予測モデル選択 過学習にならないようにalphaが大きい側が良 いが、ここでは最大値を与えるindexを機械的 に求める。 alphaの最適値が求まった。 回帰係数 切片 scikit-learnの*CV関数の処方 箋に倣い,最適alpha 値を用い て、全観測データを用いてモデ ルを作り直す。
交差検定と新規データへの目的変数予測値 図:Cell[9]の観測データ交 差検定での目的変数観測値 vs 予測値 図:Cell[11]の新規データに 対する目的変数観測値 vs 予 測値 図:Cell[12]の観測データ・ 新規データx1 vs y 新規データの外挿領域でも妥当な予測ができています。(Lassoで常に こうなるモデル学習ができるわけではありません。)
回帰係数の変化 目的:alphaを変えて回帰係数の変化を見る。
の係数 回帰係数の変化 𝑥𝑖 零 l𝑜𝑔10 (𝛼) 図:Cell[15]出力のデータフレーム部分 図:Cell[15]出力の図部分 Lassoは積極的に不要な係数を(厳密に)0とする。
𝑃 Lassoによる変数選択 𝑓 𝑥Ԧ = 𝑤𝑝 𝑥𝑝 + 𝑤0 𝑝 𝑥Ԧ = 𝑥1 , 𝑥2 , … , 𝑥𝑃 𝑤 = 𝑤, 𝑤2 , … , 𝑤𝑃 よくある説明 𝐿𝑎𝑠𝑠𝑜:𝐿𝑟𝑒𝑔 = 2𝑁 1 𝑁 σ 𝑡𝑟𝑎𝑖𝑛 𝑖 𝑡𝑟𝑎𝑖𝑛 2 𝑦𝑖 − 𝑓 𝑥Ԧ𝑖 +𝛼 𝑤 1 1 を最小化 第一項の寄与 𝑤2 第一項の最適値 𝑤1 ≠ 0, 𝑤2 ≠ 0, 第二項の最適値 𝑤1 第二項の寄与 𝐿𝑟𝑒𝑔 の最適パラメタ(この場合は𝑤1 ≠ 0, 𝑤2 =0) 図:回帰係数w1とw2の空間でのLregの第一項と第二項の寄与。
罰則項有り線 形回帰モデル Lasso 目的:回帰と モデル選択を 同時に行う L1罰則項 L2罰則項 Lasso Ridge インスタンス を作成する モデル作成 予測値作成 ハイパーパラ メタ .fit() .predict() alpha={実数} Ridge回帰も同じ。
LassoCV 010.055は途中で以下のコードを挟んでいます。 alpha_list = np.logspace(-5, -1, 20) # もっと上の行に記述した。 LassoCV ハイパーパラ メタの値リス トの指定 alphas={値リ スト} 交差検定の指 定 cv=KFold 内部でハイ パーパラメタ の最適化を行 う。 全観測データに対してkfで指定した交差検定を行い最適なハイパーパラ メタを求め、最後に最適化されたハイパーパラメタを用い、全観測デー タを用いて回帰モデルを一つ生成します。 LassoCVも.fit()の後は.predict()が使えます。全観測データ に対する予測値の生成は以下で得られます。 yp = reg.predict(X) 動作を理解できるまで使 わないことを薦める。
LLMの利用 LLMにより問 題を解決する。 LLMにより知 識を獲得する。 LLMによる コードを書く。
ソースコードから説明の生成 ChatGPT Classic User: 以下のコードを200文字以内で説明してください。 ``` from sklearn.linear_model import Lasso from sklearn.metrics import r2_score from sklearn.model_selection import KFold # 計算パラメタ設定 N_SPLITS = 5 SHUFFLE = True score_function = r2_score # 性能評価値を保存する変数の定義 train_score_list = [] test_score_list = [] alpha_list = np.logspace(-5, 2, 20) # hyperparameter loop for alpha in alpha_list: reg = Lasso(alpha=alpha) # CV setting kf = KFold(n_splits=N_SPLITS, shuffle=SHUFFLE, random_state=1) # CV loop cv_train_score_list = [] cv_test_score_list = [] for train, test in kf.split(X): Xtrain, ytrain = X[train], y[train] Xtest, ytest = X[test], y[test] reg.fit(Xtrain, ytrain) ytrainp = reg.predict(Xtrain) ytestp = reg.predict(Xtest) # 評価指標の計算と保存 trainscore = score_function(ytrain, ytrainp) cv_train_score_list.append(trainscore) testscore = score_function(ytest, ytestp) cv_test_score_list.append(testscore) train_score_list.append([np.mean(cv_train_score_list), np.std(cv_train_score_list), alpha]) test_score_list.append([np.mean(cv_test_score_list), np.std(cv_test_score_list), alpha]) ``` このコードは、機械学習のラッソ回帰モデルの性能を評価するためのものです。そ れぞれの過程を200文字以内で説明します: 1. **ライブラリのインポートと設定**: sklearnのラッソ回帰、評価指標(R^2スコ ア)、そして交差検証(KFold)のための関数をインポートします。次に、交差検 証のスプリット数、シャッフルの有無、スコア関数を設定します。 2. **性能評価値の保存変数の定義**: モデルの訓練スコアとテストスコアを保存す るためのリストと、ハイパーパラメータ(alpha)の値の範囲を設定します。 3. **ハイパーパラメータのループ**: alphaの値ごとに、以下の手順を行います。 4. **交差検証の設定**: KFoldを使ってデータを訓練セットとテストセットに分割 します。 5. **交差検証ループ**: 各スプリットに対して、以下を実行します。 - ラッソ回帰モデルのインスタンス化と訓練。 - 訓練データとテストデータでモデルを評価(R^2スコアの計算)。 - 各スプリットの訓練スコアとテストスコアをリストに追加。 6. **スコアの集計**: 各alpha値について、交差検証で得られたスコアの平均と標 準偏差を計算し、それらをリストに保存します。
LLMの説明を利用したコード生成 ChatGPT4 以下の過程をPythonコードで書いてください。 1. **ライブラリのインポートと設定**: sklearnのラッソ回帰、評価指標(R^2ス コア)、そして交差検証(KFold)のための関数をインポートします。次に、交 差検証のスプリット数、シャッフルの有無、スコア関数を設定します。 2. **性能評価値の保存変数の定義**: モデルの訓練スコアとテストスコアを保存 するためのリストと、ハイパーパラメータ(alpha)の値の範囲を設定します。 3. **ハイパーパラメータのループ**: alphaの値ごとに、以下の手順を行います。 4. **交差検証の設定**: KFoldを使ってデータを訓練セットとテストセットに分割 します。 5. **交差検証ループ**: 各スプリットに対して、以下を実行します。 - ラッソ回帰モデルのインスタンス化と訓練。 - 訓練データとテストデータでモデルを評価(R^2スコアの計算)。 - 各スプリットの訓練スコアとテストスコアをリストに追加。 6. **スコアの集計**: 各alpha値について、交差検証で得られたスコアの平均と標 準偏差を計算し、それらをリストに保存します。 # 条件 alphaはalpha_list = np.logspace(-5, 2, 20)のリストから値を取得します。 5回交差検定を行います。 データセットは Diabetes datasetを用いてください。 import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import Lasso from sklearn.metrics import r2_score from sklearn.model_selection import KFold from sklearn.datasets import load_diabetes # データの読み込み X, y = load_diabetes(return_X_y=True) # ハイパーパラメータの設定 alpha_list = np.logspace(-5, 2, 20) # 交差検証の設定 kf = KFold(n_splits=5, shuffle=True, random_state=42) # 結果を保存するためのリスト train_scores = [] test_scores = [] mean_train_scores = [] mean_test_scores = [] std_train_scores = [] std_test_scores = [] # ハイパーパラメータのループ for alpha in alpha_list: temp_train_scores = [] temp_test_scores = [] # 交差検証ループ for train_index, test_index in kf.split(X): X_train, X_test = X[train_index], X[test_index] y_train, y_test = y[train_index], y[test_index] # モデルのインスタンス化と訓練 model = Lasso(alpha=alpha) model.fit(X_train, y_train) # スコアの計算 y_train_pred = model.predict(X_train) y_test_pred = model.predict(X_test) temp_train_scores.append(r2_score(y_train, y_train_pred)) temp_test_scores.append(r2_score(y_test, y_test_pred)) # スコアの集計 train_scores.append(temp_train_scores) test_scores.append(temp_test_scores) mean_train_scores.append(np.mean(temp_train_scores)) mean_test_scores.append(np.mean(temp_test_scores)) std_train_scores.append(np.std(temp_train_scores)) std_test_scores.append(np.std(temp_test_scores)) # 結果の可視化 plt.figure(figsize=(10, 6)) plt.errorbar(alpha_list, mean_train_scores, yerr=std_train_scores, label='Train Score', fmt='-o') plt.errorbar(alpha_list, mean_test_scores, yerr=std_test_scores, label='Test Score', fmt='-o') plt.xscale('log') plt.xlabel('Alpha') plt.ylabel('R^2 Score') plt.title('R^2 Scores for different Alpha values in Lasso Regression') plt.legend() plt.show() →コード010.056
コード実行 コード010.056 DATA_NAME = "x5_sin" としてX,yを010.055から取得 して実行。 図: 010.056のCell[2]の出力図
LLMの説明を利用したコード生成 右の図( 010.055のCell[15]の図) を書かせたい。 慣れてきたら,LLMのソースコー ドの説明を用いずに,ソースコー ドの内容を自分で簡単に説明して みます。 図:010.055のCell[15]の図
LLMの説明を利用したコード生成 ChatGPT4: 慣れてきたらプロンプトを簡単に書く。 from sklearn.linear_model import Lasso import matplotlib.pyplot as plt import numpy as np # 仮のデータを生成(実際にはユーザーが提供するデータを使用する) … 以下のPythonコードを書いてください。 scikit-learnを用いてください。 # 入力 説明変数`X` 目的変数`y` alphaのリスト `alpha_list` # 過程 Lasso回帰の正則化パラメータ`alpha`を変 化させながら、全データを用いて回帰モデ ルを学習し、各alpha値に対する回帰係数を 可視化する。 # alphaのリスト(ユーザーが提供する値を使用する) alpha_list = [0.1, 0.5, 1, 5, 10] # 各alphaに対する回帰係数を格納するリスト coefs = [] for alpha in alpha_list: lasso = Lasso(alpha=alpha) lasso.fit(X, y) coefs.append(lasso.coef_) # 可視化 plt.figure(figsize=(10, 6)) ax = plt.gca() ax.plot(alpha_list, coefs) ax.set_xscale('log') plt.xlabel('alpha') plt.ylabel('coefficients') plt.title('Lasso coefficients as a function of the regularization') plt.axis('tight') plt.legend(['Feature 1', 'Feature 2', 'Feature 3']) plt.show()
コード実行 LLMコードにalpha_listが 設定されていた。 alpha_listを除いて実行。 図:010.056のCell[3]の図
例3 レポジトリ内のファイル 010.regression/ 010.050.text.linear_regression.ipynb 010.055.text.linear_regression-CV.ipynb 010.060.text.RETM-KR.ipynb 010.110.answer.linear_regression.ipynb … • • • • ReCo合金の磁気相転移温度 Z-score Normalization カーネル回帰モデル 交差検定
010.060 予測モデルを学習す る プログラム組み合わ せ方式 ハイパーパラメタを 幾つか選ぶ 観測データ分割を行 う 既存関数方式 モデル当てはめを行 う 一組の訓練・テスト データ 交差検定 train_test_split KFold 線形回帰モデル LinearRegression Lasso モデル評価を行う カーネル法 Ridge KernelRidge モデルを選択する 交差検定で線形回帰 モデルを作る LassoCV 交差検定で一般的な 回帰モデルを作る RidgeCV GridSearchCV 回帰モデルの指定 その他の指定 KernelRidge 目的:この関数の利用法を知ること。
観測データの取得 ReCo磁気相転移温度データ get_data.load関数でデータフレーム,説明変数カラム,目的変数カラムを取得する。 生説明変数 目的変数
カーネルリッジ回帰 関数𝐿𝑟𝑒𝑔 = σ𝑖 𝑦𝑖 − 𝑓 𝑥Ԧ𝑖 2 +𝛼 𝑤 2 2 を最小化 カーネル法回 帰 カーネルリッ ガウス過程回 ジ法回帰 帰 𝑁 カーネルの形 𝑓 𝑥Ԧ = 𝑤𝑖 𝐾(𝑥, Ԧ 𝑥Ԧ𝑖 ) L2罰則項 𝑖 RBFカーネル: 𝐾(𝑥, 𝑦) = exp(−𝛾 𝑥 − 𝑦 Sklearn.metric s.pairwise 2 2 ) カーネルの形 sklearn.gaus sian_process .kernels.RBF RBFカーネル alpha={実数} kernel=“rbf” sklearn.metrics.pairwiseで定義される。 (ガウス過程回帰のRBFカーネルとは異なる。 sklearn.gaussian_process.kernels.RBF) gamma={実 数} 図:カーネル法回帰手法の階層構造図 RBFカーネルを用いるカーネルリッジ回帰では ハイパーパラメタが2つある。 estimator = KernelRidge(alpha=1 , gamma=1, kernel="rbf")
一般的なハイパーパラメタの最適化 GridSearchCV モデル モデル内ハイパー パラメタ 性能評価指標 交差検定 内部過程表示 estimator={回帰ク ラス|分類クラス} param_grid={辞 書} scoring={文字列} cv=KFold verbose={int} Default: 回帰 モデルクラスの score()関数 Default: cv=5, shuffleをしな い。 図:GridSearchCVのパラメタ
カーネルリッジ回帰+交差検定 名前確認のためにRBFカー ネルのalpha=, gamma=を 書いた。 ハイパーパラメタの名前を合わせる。 Param_gridのの範囲でscoringで 最適なモデルを求める。 交差検定で最適なハイパーパラメタを得 て、最後に観測データ全てを用いて最適 なハイパーパラメタで一つ回帰モデルを 学習する。 Scikit-learnの*CVモジュールは同様の機 能を持つ。
カーネルリッジ回帰+交差検定 ハイパーパラメタの網羅探索点 np.logspace(-5, 0, 11) gamma alpha np.logspace(-6, 0, 11)
GridSearchCVの表示 verbose>=2で交差検定過程と用い たハイパーパラメタが表示される。 (alpha,gamma)= (1-6, 1e-5) (alpha,gamma)= (1-6, 3.16e-5)
GridSearchCVの出力 reg_cv. cv_results_ が結果出力辞書を返します。 print(reg_cv.cv_results_.keys()) 10回交差検定の場合の出力キー例 dict_keys(['mean_fit_time', 'std_fit_time', 'mean_score_time', 'std_score_time', 'param_alpha', 'param_gamma', 'params', 'split0_test_score', 'split1_test_score', 'split2_test_score', 'split3_test_score', 'split4_test_score', 'split5_test_score', 'split6_test_score', 'split7_test_score', 'split8_test_score', 'split9_test_score', 'mean_test_score', 'std_test_score', 'rank_test_score’]) Enjoy print(reg_cv.cv_results_)
LLMの利用したコード生成
以下のPythonコードを作成してください。
# 入力変数
X: 規格化された説明変数
y: 目的変数
# 過程
1. カーネルリッジモデルの予測モデルを作成し
てください。
2. 横軸:目的変数に対して,縦軸:目的変数予
測値を図示する。
# 条件
RBFカーネルを用いる。
RBFカーネルのハイパーパラメタを最適化する。
10回交差検定を行う。ランダムにシャフルする。
回帰データセットはscikit-learn,
load_diabetes
を用いる。
R2スコアを用いる。
Microsoft Copilot
from sklearn.datasets import load_diabetes
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.kernel_ridge import KernelRidge
import matplotlib.pyplot as plt
import numpy as np
# データのロード
diabetes = load_diabetes()
# データとターゲットの分割
X, y = diabetes.data, diabetes.target
# モデルの設定
model = KernelRidge(kernel='rbf')
# ハイパーパラメータの最適化
param_grid = {"alpha": [1e0, 1e-1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5)}
grid = GridSearchCV(model, param_grid=param_grid)
grid.fit(X, y)
print(f'Best parameters: {grid.best_params_}')
param_gridを補完。
# 最適なハイパーパラメータでモデルを設定
model = KernelRidge(kernel='rbf', **grid.best_params_)
# 交差検証
cv = KFold(n_splits=10, shuffle=True, random_state=0)
scores = cross_val_score(model, X, y, cv=cv, scoring='r2')
print(f'Average R2 score: {np.mean(scores)}')
# モデルのフィッティング
model.fit(X, y)
# 予測
predictions = model.predict(X)
…
記述が曖昧だった
のでパラメタ最適
化部分でランダム
シャフルでなく,
最適化後のシャフ
ルになっている。
LLMの説明を利用したコード生成
from sklearn.model_selection import GridSearchCV, KFold, cross_val_score
from sklearn.kernel_ridge import KernelRidge
import matplotlib.pyplot as plt
import numpy as np
追加部分
エラーが出た場合,そのメッセージをそのまま
プロンプトに書くと修正する。
# モデルの設定
model = KernelRidge(kernel='rbf')
# ハイパーパラメータの最適化
param_grid = {"alpha": [1e0, 1e-1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5)}
grid = GridSearchCV(model, param_grid=param_grid)
grid.fit(X, y)
print(f'Best parameters: {grid.best_params_}')
# 最適なハイパーパラメータでモデルを設定
model = KernelRidge(kernel='rbf', **grid.best_params_)
…
コード実行 入力を010.060の入力に変え て実行 コード:010.061 図:010.061のCell[2]の図。
LLMの説明を利用したコード生成
以下のPythonコードを作成してください。
# 入力変数
X: 規格化された説明変数
y: 目的変数
# 過程
#1
最適なハイパーパラメタを持つRBFカーネルの
KernelRidgeモデルを学習する。
{# 1}の条件として
GridSearchCVを用いる。10回交差検定を用い
て, R2スコアで最適な回帰モデルを作成する。
交差検定時に`X`,`yをランダムにシャフルする。
#2
横軸:目的変数に対して,縦軸:目的変数予測値
を図示する。
Microsoft Copilot
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.kernel_ridge import KernelRidge
import matplotlib.pyplot as plt
import numpy as np
# ハイパーパラメータの範囲を設定
param_grid = {"alpha": [1e0, 1e-1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5)}
# GridSearchCVを用いて最適なハイパーパラメータを探索
kr = GridSearchCV(KernelRidge(kernel='rbf'), cv=KFold(n_splits=10, shuffle=True),
param_grid=param_grid, scoring='r2')
kr.fit(X, y)
交差検定時に`X`,`yをラ
# 最適なモデルで予測
y_pred = kr.predict(X)
ンダムにシャフルする。
# 結果のプロット
plt.scatter(y, y_pred)
plt.xlabel('Actual')
plt.ylabel('Predicted')
plt.title('Kernel Ridge Regression with RBF kernel')
plt.show()
実行結果は010.061に示す。
LLMによる知識獲得 Microsoft Copilot Scikit-learnのドキュメントでKernelRidgeを読 むと他のカーネルが利用可能とある。 Scikit-learnのKernelRidgeで利用可能なカーネルを 教えてください。 Scikit-learnのKernelRidgeでは、以下のカーネルが利用可能 です¹³: 1. **線形カーネル (linear)** 2. **RBFカーネル** 3. **ラプラシアンカーネル (laplacian)** 4. **多項式カーネル (polynomial)** 5. **指数カーネル (exponential)** 6. **χ2カーネル (chi2)** 7. **シグモイドカーネル (sigmoid)** これらのカーネルは、KernelRidgeの`kernel`パラメータで指 定できます¹. カーネルは、データ間の類似性を計算するため の関数で、それぞれ異なる特性と用途があります¹. これらの カーネルを適切に選択することで、KernelRidge回帰の性能を 最適化することができます¹.
LLMの説明を利用した修正コード生成
ソースの一部を変更させる。
Microsoft Copilot(該当部分のみ)
作成されたソースコードを多項式カーネル
を使うように書き換えてください。
param_grid も多項式カーネル 用に書き直
してください。
# モデルの設定
model = KernelRidge(kernel='polynomial')
# ハイパーパラメータの最適化
param_grid = {"alpha": [1e0, 1e-1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5),
"degree": [2, 3, 4, 5]}
grid = GridSearchCV(model, param_grid=param_grid)
grid.fit(X, y)
print(f'Best parameters: {grid.best_params_}')
# 最適なハイパーパラメータでモデルを設定
model = KernelRidge(kernel='polynomial', **grid.best_params_)
…
KernelRidge回帰
カーネル法回
帰
生成された右コードのparam_grid は妥当なこ
とを確認しておく。
Scikit-learnのドキュメントを確認すると
sklearn.metrics.pairwise.polynomial_kernelで
は
K(X, Y) = (gamma <X, Y> + coef0) ^ degree
なので妥当な書き換えである。
カーネルリッ
ガウス過程回
ジ法回帰
帰
カーネルの
カーネルの形
L2罰則項
形
sklearn.gau
ssian_proce
ss.kernels.
RBF
Sklearn.metr
ics.pairwise
alpha={実数},
RBFカーネル
default=1
kernel=“rbf”
gamma={実
数}
Polynomialカーネル
Kernel=“polynomial”
degree={実数},
default=3
図:Kernel回帰の階層構造図
gamma={実
数}
coef0={実数},
default=1
コード実行 X,yを補完した実行結果を右図に表示。 警告メッセージは多数でるが図は出力さ れる。 010.061のソースは保存されています。 図:010.061 Cell[4]の出力図
例4 レポジトリ内のファイル 010.regression/ 010.050.text.linear_regression.ipynb 010.055.text.linear_regression-CV.ipynb 010.060.text.RETM-KR.ipynb 010.110.answer.linear_regression.ipynb … • • • • トイモデル Z-score Normalization 交差検定 Ln罰則項線形回帰モデルの比較 目的:共線性がある場合の回帰係数を比較する。
共線性について 𝑥 𝑥3 𝑥5 sin 𝑥 = − + +⋯ 1 3! 5! であり、yには観測誤差を入れており、観測データ“x5_sin.csv”は線形回帰では係数に任意性 がある多重共線性を持つデータです。 罰則項がある・もしくは無い線形回帰でモデル学習すると回帰係数はどうなるでしょうか? DATA_NAME = "x5_sin" NORMALIZATIONTYPE = "standard" REGTYPE = “linear” # “linear”, “lasso”, “ridge“ に変更可能 RANDOM_STATE = 1 # random state of train_test_split REGTYPEを“linear”, “lasso”, “ridge“ に変更することで、罰則項が無い線形回帰、 L1罰則項を持つLasso、L2罰則項があるRidge回帰の回帰係数を比較します。
罰則項による線形回帰の回帰係数の比較 010.110の最後の図 横軸:交差検定の各モデルインデックス 縦軸:訓練データで学習した回帰モデルの係数の値。 罰則項が無い線形回帰モデルでは全て非ゼロの回帰係数 (x, x 2 , x 3 , x 4 , 𝑥 5 , sin 𝑥 ) を持つ。 回帰係数の値も大きい。符号も変わる。 LassoとRidge回帰では罰則項のおかげで回帰係数はほぼ固定される。 局所最小解が大域最小解と一致する。 ー>後ほど大域最小解であることを用いた解析例が出てくる。
別データ 010.055, 010.060, 010.110, 010.120は回帰用のデータ ‘x5_sin', 'x5_sin_new', 'ReCo', 'Carbon8', 'ZB_WZ_all', 'ZB_WZ_3', 'ZB_WZ_2’ を用いることが可能です。 … = get_data.load(DATA_NAME) で別DATA_NAMEを指定してください。
LLMの利用 現在のLLMとの付き合い方 現在のLLMとの付き合い方 人が誤解する 「初心者あるある」 回答 Q. 何を質問すれば良いのか分からない。具体的な質 問ができない。 A. (どこまで分かっているのかを説明してから) LLMに尋ねる。 ハルシネー ション 暗黙知 一方的に尋ねて回答を受け入れれば良いかというと しかし,LLMにはハルシネーション(存在しない事 実や正確でない情報を生成する。)が起きる。 省略により誤 誤った回答 • 解させる回答 • LLMが正しい知識(回答)を全て教えてくれるのではない ので鵜呑みにしてはいけない。LLMは知識獲得の支援を行 う・問題を解決する一つの手段と思ったほうが良い。 自分でまとめ直す必要もある。(LLMはその支援も行え る。) 現状ではユーザーが最低限の知識を持ち, ユーザーがLLMの回答を取捨選択する。 質問者側に「明確な問題」と「問題解決のためのおおまかな 戦略」が無いとLLMはうまく使えない。
LLMによるコード生成 今やPythonを知らなくても,過程を十分に説明できれば Pythonコードを作成できます。 しかし,何をしたいのかを理解しているのは「あなた」だけです ので,過程を説明できるように学習してください。
以上です。