Menu
CoddyTech

振り返り:配送エリア

CoddyのMachine Learningジャーニー「教師なし学習」セクションの一部。レッスン 10/51。

challenge icon

チャレンジ

簡単

この章の冒頭にあったゾーンマップを覚えていますか?今度は自分のマップを描いてみましょう。あるパン屋の配送バンは150か所の配送先を回り、stops.csvでは東方向がkm、北方向がメートルで記録されています。

  1. 両方の列をスケーリングします。
  2. kを2から7まで変えて、スケーリングした行にKMeansを適合させます。慣性(小数点以下1桁)とシルエットスコア(小数点以下3桁)を出力します。その後、シルエットスコアが最も高いkを出力します。
  3. そのkのゾーンを実際の単位でマップにします。各ゾーンの配送先を件数付きのラベル(例:50 stops)で示し、各ゾーンの平均位置に黒い星を付け、凡例を表示します。

別の都市の場合:

k = 2: inertia 109.5, silhouette 0.535
k = 3: inertia 22.8, silhouette 0.737
k = 4: inertia 18.3, silhouette 0.597
k = 5: inertia 14.5, silhouette 0.443
k = 6: inertia 12.7, silhouette 0.368
k = 7: inertia 11.2, silhouette 0.364
Zones: 3

そのマップ:

Delivery Zonesというタイトルのマップ。横軸は東方向のkm、縦軸は北方向のメートル。配送先のゾーンは3つで、左下に45か所、右上に40か所、右下に25か所。それぞれの中央に黒い星があり、凡例には各ゾーンの配送先の件数が表示されている

その後、Coddyがあなたのマップを説明します。

自分で試してみよう

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score

# 配送先ごとに1行:東方向はkm、北方向はメートル(旧システムの単位)
stops = pd.read_csv("stops.csv")
X = stops[["east_km", "north_m"]]

fig, ax = plt.subplots()
ax.set_title("Delivery Zones")
ax.set_xlabel("East (km)")
ax.set_ylabel("North (m)")

# 以下にコードを書いてください

教師なし学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ