Pythonは平均シフトクラスタリングアルゴリズムを実装しています

この記事の例では、参照用に平均シフトクラスタリングアルゴリズムを実装するためのpythonの特定のコードを共有しています。具体的な内容は次のとおりです。

1、 新しいMeanShift.pyファイルを作成します

import numpy as np

# 事前設定されたしきい値を定義する
STOP_THRESHOLD =1e-4
CLUSTER_THRESHOLD =1e-1

# 測定機能を定義する
def distance(a, b):return np.linalg.norm(np.array(a)- np.array(b))

# ガウスカーネル関数を定義する
def gaussian_kernel(distance, bandwidth):return(1/(bandwidth * np.sqrt(2* np.pi)))* np.exp(-0.5*((distance / bandwidth))**2)

# mean_シフトクラス
classmean_shift(object):
 def __init__(self, kernel=gaussian_kernel):
 self.kernel = kernel

 def fit(self, points, kernel_bandwidth):

 shift_points = np.array(points)
 shifting =[True]* points.shape[0]while True:
 max_dist =0for i inrange(0,len(shift_points)):if not shifting[i]:continue
 p_shift_init = shift_points[i].copy()
 shift_points[i]= self._shift_point(shift_points[i], points, kernel_bandwidth)
 dist =distance(shift_points[i], p_shift_init)
 max_dist =max(max_dist, dist)
 shifting[i]= dist   STOP_THRESHOLD

 if(max_dist < STOP_THRESHOLD):break
 cluster_ids = self._cluster_points(shift_points.tolist())return shift_points, cluster_ids

 def _shift_point(self, point, points, kernel_bandwidth):
 shift_x =0.0
 shift_y =0.0
 scale =0.0for p in points:
 dist =distance(point, p)
 weight = self.kernel(dist, kernel_bandwidth)
 shift_x += p[0]* weight
 shift_y += p[1]* weight
 scale += weight
 shift_x = shift_x / scale
 shift_y = shift_y / scale
 return[shift_x, shift_y]

 def _cluster_points(self, points):
 cluster_ids =[]
 cluster_idx =0
 cluster_centers =[]for i, point inenumerate(points):if(len(cluster_ids)==0):
 cluster_ids.append(cluster_idx)
 cluster_centers.append(point)
 cluster_idx +=1else:for center in cluster_centers:
  dist =distance(point, center)if(dist < CLUSTER_THRESHOLD):
  cluster_ids.append(cluster_centers.index(center))if(len(cluster_ids)< i +1):
  cluster_ids.append(cluster_idx)
  cluster_centers.append(point)
  cluster_idx +=1return cluster_ids

2、 上記のpyファイルを呼び出す

# - *- coding: utf-8-*-"""
Created on Tue Oct 0911:02:082018

@ author: muli
"""

from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt 
import random
import numpy as np
import MeanShift

def colors(n):
 ret =[]for i inrange(n):
 ret.append((random.uniform(0,1), random.uniform(0,1), random.uniform(0,1)))return ret

def main():
 centers =[[-1,-1],[-1,1],[1,-1],[1,1]]
 X, _ =make_blobs(n_samples=300, centers=centers, cluster_std=0.4)

 mean_shifter = MeanShift.mean_shift()
 _, mean_shift_result = mean_shifter.fit(X, kernel_bandwidth=0.5)

 np.set_printoptions(precision=3)print('input: {}'.format(X))print('assined clusters: {}'.format(mean_shift_result))
 color =colors(np.unique(mean_shift_result).size)for i inrange(len(mean_shift_result)):
 plt.scatter(X[i,0], X[i,1], color = color[mean_shift_result[i]])
 plt.show()if __name__ =='__main__':main()

結果を図に示します。

参照リンク

以上が本稿の内容ですので、皆様のご勉強に役立てていただければ幸いです。

Recommended Posts

Pythonは平均シフトクラスタリングアルゴリズムを実装しています
Pythonの古典的なアルゴリズム
Pythonはtic-tac-toeゲームを実装しています
Pythonはtic-tac-toeゲームを実装しています
Pythonはマンマシンゴバンを実装します
PythonはTetrisゲームを実装しています
Pythonは画像スティッチングを実装しています
Pythonはminesweeperゲームを実装しています
Pythonはスキャンツールを実装しています
Pythonはしきい値回帰を実装します
Pythonは地雷除去ゲームを実装しています
Pythonは電子辞書を実装しています
Pythonは推測ゲームを実装しています
Pythonは単純なタンクバトルを実装します
Pythonはudpチャットウィンドウを実装します
PythonはWeChat飛行機ゲームを実装しています
Pythonは単語推測ゲームを実装しています
Pythonは駐車場管理システムを実現
Pythonはデジタル爆弾ゲームを実装しています
PythonはTCPファイル転送を実装します
Pythonnumpyはローリングケースを実装します
OpenCVPythonはパズルゲームを実装しています
Pythonは単純なtic-tac-toeゲームを実装しています
Pythonはパスワード強度検証を実装します
Pythonは車の管理システムを実装しています
Pythonはコードブロックフォールディングを実装します
Pythonはパノラマ画像スティッチングを実装しています
Pythonのデータ構造とアルゴリズム
Pythonは多次元配列ソートを実装しています
PythonがFTP機能を実装する方法
Pythonは検証コード認識を実装します
Pythonは勾配降下法を実装しています
Pythonはテキストバージョンのminesweeperを実装しています
Pythonは画像スティッチング機能を実装しています
Pythonは実店舗のゲームを実装しています
Pythonは学生のパフォーマンス評価システムを実装しています
Pythonがメール機能を実装する方法
Pythonは単にスネークゲームを実装します
FMアルゴリズム分析とPython実装
詳細な並べ替えアルゴリズム(Pythonで実装)
Pythonは為替レート変換操作を実装します
Pythonは文字列と数値のスプライシングを実装します
Pythonは10の古典的なソートアルゴリズムを実装しています
PythonはユニバーサルWebフレームワークを実装しています
Pythonは最も急な降下方法を実装します
Pythonは実際の銀行システムを実装しています
Pythonはデジタル爆弾ゲームプログラムを実装しています
Pythonはftpファイル転送機能を実装しています
Pythonはユーザー名とパスワードの検証を実装しています
Pythonがタイマー機能を実装する方法
Pythonは航空機戦争プロジェクトを実装します
python勾配降下アルゴリズムの実装
Pythonは写真の水平ステッチを実装しています
PythonはGIFグラフを逆さまに実装します