話者データを学習し、どの人のデータなのか機械学習で予測する
Libraryにmatplotlib, numpy, scikit-learn, libROSA、
識別にSVM、フーリエ変換、MFCCなどを使う
SVM
L 境界線(直線・曲線)を作り、データがどちら側か判定する
L 境界線付近をサポートベクトルと呼ぶ
import numpy as np import matplotlib.pyplot as plt import random from sklearn import svm N = 15 random.seed(11813) train_X = np.array([[random.randint(0,100), random.randint(0, 100)] for i in range(N)]) for i in range(len(train_X)): plt.plot(train_X[i][0], train_X[i][1],'o', color='blue') plt.annotate(i, (train_X[i][0], train_X[i][1]), size=20) plt.savefig('test.jpg',dpi=100)
分類する
train_y = np.array([0 for i in range(N)]) train_y[2] = train_y[3] = train_y[1] = train_y[4] = train_y[5] = train_y[6] = train_y[11] = 1 colors = ['blue','red'] for i in range(len(train_X)): plt.plot(train_X[i][0], train_X[i][1],'o', color=colors[train_y[i]]) plt.annotate(i, (train_X[i][0], train_X[i][1]), size=20) plt.savefig('test.jpg',dpi=100)
test_X = np.array([[30,60]]) plt.plot(test_X[0][0], test_X[0][1],'x', color="black") plt.annotate('test', (test_X[0][0], test_X[0][1]), size=20) plt.savefig('test.jpg',dpi=100) clf = svm.SVC(gamma=0.0001, C=1) clf.fit(train_X, train_y) test_y = clf.predict(test_X) print(test_y)
なるほど、SVMが何をやってるのかは理解できた。