ChatGPT Plugin「Noteable」ではじめるゼロから機械学習
はじめに
ファインディ株式会社、データソリューションチームの山家です。
この記事では、ChatGPT Plugin「Noteable」を使用して、機械学習とは何なのかをざっくり理解し、Titanicのデータを用いて生存予測をしていきたいと思います。
社内の5分LTで発表するためにまとめたものになります。
対象読者は、以下を想定しています。
・機械学習に興味を持ちはじめた、0からざっくりと学びたい人。
・ChatGPT Pluginの活用に興味ある人
Noteableについて
Noteable は、オンライン上でノートブックを作成,編集,実行することができるツールです。Pythonのライブラリもあり、google colabと同じ操作感で使用することができます。
pandas.DataFrameを描画した際に、Spreadsheetのようにコードを修正せずフィルタをかけれたりソートをできるのも特徴です。
ChatGPT pluginをonにする
ChatGPT Plus(20$/m)へ加入していれば、ChatGPT pluginsが使えるようです。(2023/06/08時点)
ChatGPT > setting > Plugins をonにしてNoteableのpluginをinstallする。
ChatGPTにプロンプトを投げる
機械学習を一度もやったこと無い人に対して機械学習モデルがなんなのかを説明する為、いちばん簡単なモデルを使用して説明してください。
コードは、pythonで記述してください。
以下の手順通りに実行してください。
データはランダムにnumpyで生成する。
散布図をplotする。
モデルを作成する。
モデル作成結果をplotする。
Titanicのdataをロードする。
LGBMをinstallする。
生存するかどうかを予測する。
評価した結果を出力する。
実行結果のイメージ
以下のようにプロンプトを投げると、noteableのnotebookに実行結果が出力されていきます。
以下へプロンプトやコードをコピペできるように詳細を記載していきます。
一部筆者の追記が含まれますが、内容の9割が自動で生成されたものになります。
実行結果
機械学習モデルの紹介
機械学習は、コンピュータがデータから学習し、新しいデータに対して予測や決定を行う能力を持つアルゴリズムのことを指します。 ここでは、最も基本的な機械学習モデルの一つである線形回帰を例に、その概念を説明します。
データの作成と散布図のplot
# 必要なライブラリをインポートします
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
# データを生成します
np.random.seed(0)
x = np.random.rand(100, 1)
y = 2 + 3 * x + np.random.rand(100, 1)
# 散布図をプロットします
plt.scatter(x, y)
plt.show()
モデルを作成・結果をみる
# モデルを作成します
model = LinearRegression()
model.fit(x, y)
# モデルの結果をプロットします
x_line = np.arange(0, 1, 0.01)[:, np.newaxis]
y_line = model.predict(x_line)
plt.scatter(x, y)
plt.plot(x_line, y_line, color='red', linewidth=2)
plt.show()
過去のデータを学習し、$${x}$$を入力したときに$${y}$$の値を出力する式ができたかと思います。この推論器のことを機械学習モデルといい、$${x}$$のことを特徴量といいます。
今回は$${x}$$が1つのパターンでしたが、$${x}$$が複数の場合もあります。
Titanicのdataをロードする。
# LGBMをインストールします
!pip install lightgbm
# 必要なライブラリをインポートします
import lightgbm as lgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# Titanicデータセットをロードします
import seaborn as sns
titanic = sns.load_dataset('titanic')
titanic.head()
※特徴量の説明が誤ってる可能性があります。ご了承くださいmm
生存するかどうかを予測する。 評価した結果を出力する。
# データの前処理
titanic = titanic[['survived', 'pclass', 'sex', 'age']]
titanic = titanic.dropna()
titanic['sex'] = titanic['sex'].map({'male': 0, 'female': 1})
# データを分割します
X = titanic.drop('survived', axis=1)
y = titanic['survived']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルを作成します
model = lgb.LGBMClassifier()
model.fit(X_train, y_train)
# テストデータで予測を行います
y_pred = model.predict(X_test)
# 評価します
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)
Accuracy:は、0.7552447552447552でした。
特徴量の重要度
追加で特徴量の重要度を聞いたところ、以下のように結果が出ました。
まとめ
今回は、線形回帰と、TitanicのdataでLGBMを使用してmodelの作成をしました。
noteableを使用することで、アップロードしたローカルのデータを使用することもできるので、活用の幅が広がりそうだなと思いました。
今回使用したモデルに興味を持ちはじめて、アルゴリズムを調べていただける方がいたり、何らかの足がかりになれましたら幸いです。