Esempio n. 1
0
def crossValidation(X, Y, k, kernel=np.dot):
  # answerを正解としてresultの正解率を計算
  def accuracyRate(result, answer):
    return 1.0 - sum(abs(result - answer)/2) / float(len(result))

  n = len(X)  # データ点の個数
  l = n / k   # k分割したデータ点の個数
  ac = 0.0    # 正解率の初期化

  # k-交差検定を行い正解率を計算
  for i in range(k):
    # l個の評価ベクトルとそのクラス
    testVectors = X[l*i:l*(i+1)]
    classForTestVectors = Y[l*i:l*(i+1)]
    # n-l個の訓練ベクトルとそのクラス
    learningVectors = np.vstack((X[:l*i], X[l*(i+1):]))
    classForlearningVectors = np.hstack((Y[:l*i], Y[l*(i+1):]))

    # 訓練ベクトルからサポートベクターを計算
    svm = SVM(learningVectors, classForlearningVectors, kernel)
    # 学習した識別関数で評価ベクトルを識別
    result = [svm.discriminate(t) for t in testVectors]
    # 評価結果の正解率を算出
    ac += accuracyRate(result, classForTestVectors)

  # 正解率の平均を返す
  return ac / k