前提・実現したいこと
Pythonで機械学習を行う前の段階で,最近傍法を用いてクラスタリングをしてみました.しかし,このプログラムでは実行に時間がかかりすぎ使い物になりませんでした.実行時間を短縮するためにどこをどのように修正すれば良いか教えて欲しいです.
該当のソースコード
Python
1import numpy as np 2import cv2 3NL = 700 4t=0 5imgshape = (120, 100, 3) 6D = np.prod(imgshape) 7datL = np.empty((NL, D)) 8labL = np.empty(NL, dtype=int) 9K = 3 10with open ('listL.txt') as f: #学習データの読み込み 11 for line in f: 12 line = line.strip() 13 i, s = line.split() 14 img= cv2.imread(i) 15 vec = img.reshape(-1) 16 datL[t,:]=vec 17 labL[t]=s 18 t=t+1 19 20d=np.empty((NL,)) 21count=0 22cnt=0 23with open ('listT.txt') as x: #テストデータの読み込み 24 for line in x: 25 count=count+1 26 line = line.strip() 27 i, s = line.split() 28 img= cv2.imread(i) 29 vec = img.reshape(-1) 30 vec2= vec**2 31 for n in range(NL): #テストデータと学習データの距離計算(ユークリッド距離) 32 d[n]=np.sum((vec-datL[n,:])**2) 33 no=d.argmin() 34 if int(s)==labL[no]: 35 cnt=cnt+1 36 37print(cnt) #正解の数表示 38print(cnt/count) #識別率の表示 39 40
試したこと
距離計算のところ d[n]=np.sum((vec-datL[n,:])**2)を変えようとしましたが,うまくいきません.
補足情報(FW/ツールのバージョンなど)
画像の読み込みのは時間がかかっていません.これは最短距離法を同じデータで実装した場合,約1〜2秒でできましたが,最近傍法は約30秒かかってしまします.そこで,距離計算に目をつけたのですが改善方法が見つからず苦戦しています.よろしくお願いします.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/15 10:53 編集
2020/01/17 02:17 編集