predictメソッド
Coddyの「機械学習入門」コースのレッスン 8/19。
チャレンジ
中級predict メソッドを完成させてください。
このメソッドは、新しいポイントのリスト X を受け取る必要があります。
各新しいポイントについて、そのポイントと self.points に格納されている他のすべてのポイントとの間の距離を計算します。最も近い self.k 個のポイントのラベルを抽出します。
最も近いポイントの中から多数派のラベルを見つけます。これが予測されるクラスになります。
例えば、以下のようなポイントとラベルがあるとします:
| points | (1, 5) | (5, 0) | (3, 2) | (8, 1) | (4, 4) | (7, 7) |
| labels | A | B | A | B | C | A |
ここに新しいポイント (3, 3) があります。
このポイントと他のすべてのポイントとの距離は以下の通りです:
| points | (1, 5) | (5, 0) | (3, 2) | (8, 1) | (4, 4) | (7, 7) |
| distance from (3, 3) | 8 | 13 | 1 | 29 | 2 | 32 |
| labels | A | B | A | B | C | A |
ここで k = 3 の場合、新しいポイントに最も近い 3 つのポイントを見つける必要があります。最も近いのは (3, 2)、(1, 5)、(4, 4) です。これらのポイントに対応するラベルは A、A、C です。A が2つ、C が1つあります。A が多数派なので、新しいポイントは A と分類されます。
predict メソッドは、新しいポイントに対して分類されたラベルのリストを返す必要があります。
ラベルのリストから多数派のラベルを見つけるには、max(set(labels), key = labels.count) を使用してください。
自分で試してみよう
class KNN:
def __init__(self, k):
self.points = None
self.labels = None
self.k = k
def distance(self, point_a, point_b):
# Write your code here
return (sum([(point_a[i] - point_b[i])**2 for i in range(len(point_a))]))**0.5
def fit(self, X_train, y_train):
# Write your code here
self.points = X_train
self.labels = y_train
def predict(self, X_test):
pass機械学習入門のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ