適切なポイントを選択するために適用するアルゴリズム


9

下の写真は、原点の周りの7つのポイントを示しています。それらの1つは、ルールと経験に基づいて人間によって選択されており、赤(左下の四分円にある1つ)に色分けされています。

ここに画像の説明を入力してください

現在、これらのポイントのセットは1000以上あり、各セットに対して人間が単一のポイントを選択しています。これらの条件はすべてのセットに適用されます。

  • 各セットには約3〜10のポイントがあります
  • 外れ値はありません
  • ポイントは正と負の値を持つことができます
  • ポイントを選択するときに間違いはありませんでした

私の質問は、これらのセットと人間が行った選択から学習する機械学習アルゴリズムがあり、新しいポイントのセットが与えられたときにどのポイントを選択するかを自動的に決定できるかどうかです。この新しいセットは、もちろん上記の最初の3つの条件を満たす。

2つの最後の発言:

  • 私が挙げた例は、ランダムに作成された例であり、選択された原点とともに、原点の周りの平面内の点に関するアイデアをサポートします。実際にはもっと多くの構造があるかもしれませんが、今のところ私は好奇心が強く、このケースで何が可能か知りたいです。
  • バリエーションは可能ですか?それが約2つの選択されたポイントであるか、またはポイントの代わりに特定の半径を持つ円があるとします。

2
大声で考えるだけで、カーネルトリックは役立つでしょうか?選択された点は、他の空間(たとえば、より高い次元)で分離可能である可能性が高い一方で、他の点のすぐ近くに座っているように見え、そこで分類を行います!考える価値があると思います。
TwinPenguins 2018

1
@MajidMortazaviいいですね。正直なところ、機械学習は私にとって新しい分野です。私が知っている唯一のことは、可能性はたくさんあるということですが、私はどのように、何をするかについては無知です。カーネルの提案について読み込もうとします。
Elmex80s

2
他のポイントからの距離、他のポイントの数などの特徴を各ポイントに追加する場合、K-Nearest Neighborsなどの簡単な方法を使用して、トレーニングした履歴ポイントが最も類似していると判断できます。新しいポイント、およびその分類を使用します。この種の非線形境界には、決定木またはニューラルネットの方が適している場合があります。
ダンカーター

1
@DanCarterのコメントに便乗して、どのMLアルゴリズムを使用するかを尋ねるのは間違った質問です。設計できる機能を考えて、使用する方法を決定してください(ここで複数あることが不可欠です。問題が非常によく理解されていない限り、1つの方法を試してはいけません)。試してみるべき他のいくつかの機能:重心からの距離(絶対値と平均点重心距離の両方に対する)、原点からの距離、原点から点へのベクトルが軸となす角度。
ポール

1
2つ以上のポイントを任意に互いに近づけることはできますか?
イムラン2018

回答:


6

これは興味深い問題です。次の2つの理由により、特に困難が伴います。

  • 2つのポイントセットをどのように比較すればよいですか?機械学習の古典的な問題には、固定された数の属性があり、これらの属性を交換することはできません。たとえば、属性(ageおよびheightセンチメートル)を持つさまざまな人物に関するデータがあるかもしれません。すべてのサンプルは、それぞれに1つのエントリを持ち、そしてもちろん(age, height) = (22, 180)同じではありません(age, height) = (180, 22)。あなたの問題ではどちらも正しくありません。ポイントセットには3〜10のポイントがあり、ポイントを入力する順序は、2つのポイントセットを比較するときに違いが生じないようにする必要があります。
  • どのように予測を行うのですか?上記のポイントセットと同様のトレーニングセットからポイントセットを選択する方法を見つけたとします。私たちの予測はあなたの写真の7つのポイントの1つでなければならないという問題に直面しています。ただし、これらのポイントはいずれも、類似のポイントセットに含まれていない可能性があります。

両方の課題に対処するアルゴリズムの概要を説明します。予測精度はあまり良くありません。しかし、たぶん、あなたはそれがどのように改善されることができる方法を見るでしょう。そして、少なくともそれは何かを予測しますよね?

1.サンプルのシミュレーション

アルゴリズムをテストできるように、サンプルとラベルを生成する関数を作成しました。

サンプルの生成: 各サンプルには3〜10個のポイントが含まれます。ポイントの数はランダムで、均一な分布から描かれます。各ポイントはの形式(x_coordinate, y_coordinate)です。座標も正規分布から描かれたランダムなものです。

import numpy as np
from random import randint

def create_samples(number_samples, min_points, max_points):

    def create_single_sample(min_points, max_points):
        n = randint(min_points, max_points)
        return np.array([np.random.normal(size=2) for _ in range(n)]) 

    return np.array([create_single_sample(min_points, max_points) for _ in range(number_samples)])

ラベルの生成:おもちゃの例として、ポイントを選択するためのルールは次のとおりであると仮定します。常にに最も近いポイントを選択します(0, 0)。ここで、「最も近い」はユークリッドノルムの観点から理解する必要があります。

def decision_function_minnorm(sample):
    norms = np.apply_along_axis(np.linalg.norm, axis=1, arr=sample)
    return sample[norms.argmin()]

def create_labels(samples, decision_function):
    return np.array([decision_function(sample) for sample in samples])

これで、トレーニングセットとテストセットを作成できます。

n_train, n_test = 1000, 100
dec_fun = decision_function_minnorm

X_train = create_samples(number_samples=n_train, min_points=3, max_points=10)
X_test = create_samples(number_samples=n_test, min_points=3, max_points=10)
y_train = create_labels(X_train, dec_fun)
y_test = create_labels(X_test, dec_fun)

2.ハウスドルフ距離によるポイントセットの比較

最初の問題に取り組みましょう:異なるポイントセットをどのように比較する必要がありますか?ポイントセットのポイント数が異なります。また、ポイントを書き留める順序は重要ではないことに[(0,0), (1,1), (2,2)]注意してください。ポイントセットと比較すると、ポイントセットと比較した場合と同じ結果になり[(2,2), (0,0), (1,1)]ます。私のアプローチは、ハウスドルフ距離を介してポイントセットを比較することです

def hausdorff(A, B):

    def dist_point_to_set(x, A):
        return min(np.linalg.norm(x - a) for a in A)

    def dist_set_to_set(A, B):
        return max(dist_point_set(a, B) for a in A)

    return max(dist_set_to_set(A, B), dist_set_to_set(B, A))

3. k最近傍を介した予測と平均化

これで、ポイントセット間の距離の概念がわかりました。これにより、k最近傍分類の使用が可能になります。テストポイントセットが与えられると、kトレーニングサンプルで、テストポイントセットに対してハウスドルフ距離が最小となるポイントセットを見つけ、そのラベルを取得します。ここで2番目の問題が発生します。これらのkラベルをテストポイントセットの予測にどのように変換しますか?私は最も単純なアプローチを採用しました。ラベルを平均化し、平均に最も近いテストポイントセット内のポイントを予測しました。

def predict(x, num_neighbors):
    # Find num_neighbors closest points in X_train.
    distances_to_train = np.array([hausdorff(x, x_train) for x_train in X_train])
    neighbors_idx = np.argpartition(distances_to_train, -num_neighbors)[-num_neighbors:]

    # Get labels of the neighbors and calculate the average.
    targets_neighbors = y_train[neighbors_idx]
    targets_mean = sum(targets_neighbors) / num_neighbors

    # Find point in x that is closest to targets_mean and use it as prediction.
    distances_to_mean = np.array([np.linalg.norm(p - targets_mean) for p in x])
    closest_point = x[distances_to_mean.argmin()]

    return closest_point

4.テスト

アルゴリズムのパフォーマンスをテストするためのすべてが整っています。

num_neighbors = 70
successes = 0
for i, x in enumerate(X_test):
    print('%d/%d' % (i+1, n_test))
    prediction = predict(x, num_neighbors)
    successes += np.array_equal(prediction, y_test[i])

与えられた決定関数とに対して、num_neighbors = 7084%の予測精度が得られます。これはひどく良くありません、そしてもちろんそれは私たちの決定機能に特有です、それは予測するのがかなり簡単に思えます。

これを確認するには、別の決定関数を定義します。

decision_function_maxaverage(sample):
    avgs = (sample[:, 0] + sample[:, 1]) / 2
    return sample[norms.argmin()]

この関数を介して使用dec_fun = decision_function_maxaverageすると、予測精度が45%に低下します。これは、ラベルを生成する決定ルールについて考えることがいかに重要であるかを示しています。あなたのアイデアがある場合は、なぜ人々は、特定のポイントを選択し、これはあなたが最良のアルゴリズムを見つけましょう。

このアルゴリズムを改善するいくつかの方法:(1)ハウスドルフ距離の代わりに異なる距離関数を使用する、(2)k最近傍よりも洗練されたものを使用する、(3)選択したトレーニングラベルを予測に変換する方法を改善する。


3

この問題を解決するためにニューラルネットワークを使用するいくつかの方法を次に示します。

単純なフィードフォワードニューラルネットワークの場合:

  • (-1、-1)から(1,1)までの原点の周りの正方形に収まるようにデータをスケーリングします
  • k
  • 各ポイントに3番目のインジケーター入力を追加し、そのポイントが存在するかどうかを示します
  • 非表示のレイヤーの数とサイズを選択します
  • 出力でサイズ10のsoftmaxレイヤーを使用する

kk

畳み込みニューラルネットワークの場合:

  • kkj010

データは本質的に空間的であるため、CNNのパフォーマンスは向上する可能性があります。ただし、2つ以上のポイントが重複する場合はどうするかを決定する必要があります。最も簡単な解決策は、ランダムに1つを選択することです。これは、特定のタスクによっては問題ない場合があります。

リカレントニューラルネットワークの場合:

  • スケーリングされた(x、y)ポイントの可変長シーケンスをフィードし、サイズ10のソフトマックス推定を出力します

はい、RNNと同じくらい簡単です。それらは可変長入力を適切に処理しますが、空間データを処理するためのCNNの利点はまだありません。

警告:

FNNまたはRNNを使用する場合、入力データの順序付けの問題もあります。実際のデータに固有の順序がない場合は、ネットワークが異なる順序でエンコードされた同じデータに対して異なる予測を行うことは望ましくありません。これを処理する1つの方法は、データ拡張を使用することです。各トレーニング例を異なる入力順序で数回複製して、ネットワークが適切な対称性を学習できるようにしてください。

1つのアプローチを試す時間しかない場合は、CNNを選択します。CNNは空間データを適切に処理するように設計されており、入力順序に問題はありません。


1
これの問題は、予測が順序に依存することです。アルゴリズムにポイントセット(0,0), (1,1), (2,2)を供給することは、アルゴリズムにポイントセットを供給することとは異なる効果をもたらし(1,1), (2,2), (0,0)ます。
エリアスストレー

良い点エリアス-それを緩和するための提案をします。
イムラン2018

@EliasStrehleがこれに言及するのは良いことです。順序はこの問題には無関係です。ポイントのセット(すべて一意、順序なし)があります。
Elmex80s
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.