Databricksアシスタントを用いた機械学習モデル構築

こちらの派生。

https://qiita.com/taka_yayoi/items/07c49c2de588a101b719

機械学習モデルの構築ではどこまでいけるのでしょうか。

# ワイン品質予測モデルの構築

`/databricks-datasets/wine-quality/winequality-red.csv`に格納されているワインデータを使います。

> /databricks-datasets/wine-quality/winequality-red.csvのファイルを用いて、qualityを予測するモデルを構築するPythonコードを書いてください。

```py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# データの読み込み
data = pd.read_csv("/databricks-datasets/wine-quality/winequality-red.csv")

# 特徴量とターゲット変数の分離
X = data.drop("quality", axis=1)
y = data["quality"]

# 訓練データとテストデータの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 特徴量の標準化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# ロジスティック回帰による分類モデルのトレーニング
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train, y_train)

# テストデータによる予測の実行
y_pred = classifier.predict(X_test)
```

良さそうです。
![Screenshot 2024-01-31 at 15.31.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/b06bbd2b-b326-ced1-c826-36b8a2ac1f23.png)

しかし、エラー。
![Screenshot 2024-01-31 at 15.32.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f6b6eea2-6a39-3ae8-db30-2335640e4e5f.png)

診断エラーもイマイチ。ただ、メッセージによれば予測すべき`quality`列が見つからないとのこと。
![Screenshot 2024-01-31 at 15.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/83eea09c-c94d-a737-718b-b7647b9184a8.png)

データを確認したら区切り文字が`;`でした。
![Screenshot 2024-01-31 at 15.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/17692110-88bc-2b0c-ea37-e25563159b81.png)

プロンプトを改善。

> /databricks-datasets/wine-quality/winequality-red.csvのファイルを用いて、qualityを予測するモデルを構築するPythonコードを書いてください。winequality-red.csvの区切り文字は;です。

```py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# データの読み込み
data = pd.read_csv("/databricks-datasets/wine-quality/winequality-red.csv", delimiter=";")

# 特徴量とターゲット変数の分離
X = data.drop("quality", axis=1)
y = data["quality"]

# 訓練データとテストデータの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

# 特徴量の標準化
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# ロジスティック回帰による分類モデルのトレーニング
classifier = LogisticRegression(random_state=0)
classifier.fit(X_train, y_train)

# テストデータによる予測の実行
y_pred = classifier.predict(X_test)
```
![Screenshot 2024-01-31 at 15.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/77b7b7d4-3cef-9491-4e7b-a2ea5c216bc2.png)

今度は行けました。MLflowにもモデルが記録されています。
![Screenshot 2024-01-31 at 15.36.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/134c59f1-328a-7ecf-b138-0d257d0fdf36.png)

# 今日の学び

- 使用するデータ構造の理解は大事

でも、これでも行けてしまいました。

> /databricks-datasets/wine-quality/winequality-red.csvのファイルを用いて、qualityを予測するモデルを構築するPythonコードを書いてください。事前にファイルの区切り文字を判別してください。

```py
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# データを読み込む
df = pd.read_csv('/databricks-datasets/wine-quality/winequality-red.csv', delimiter=';')

# 特徴量とターゲット変数を選択する
X = df.drop('quality', axis=1)
y = df['quality']

# データを訓練用とテスト用に分割する
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデルを構築して訓練する
model = LinearRegression()
model.fit(X_train, y_train)

# テストデータで予測する
y_pred = model.predict(X_test)

# モデルの性能を評価する
score = model.score(X_test, y_test)
print("R^2スコア:", score)
```

恐ろしい…。
![Screenshot 2024-01-31 at 15.40.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/db306d76-96dd-c515-e35c-94f2490478f8.png)

- 試行錯誤も大事


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)