2016-07-08 4 views
-2

加速度計とジャイロスコープのデータからの文字認識のためにhereから取得したKNNクラシファイアを書いています。しかし、以下の機能は正しく動作せず、予測も行われていません。コード?親切に私を導く。KNNクラシファイアがraspberrypi上のpythonで動作していない

trainingset->トレーニングデータ20サンプル(10 = A、10 = B)。認識のために取ら

testset->ライブ読書。私の出力は

def compare(): 
    loaddataset() 
    testset.append(testdata) 
    print 'Train set: '+ repr(len(trainingset)) 
    print 'Test set: '+ repr(len(testset)) 
    predictions=[] 
    k = len(trainingset) 
    for x in range(len(testset)): 
      neighbours = getneighbours(trainingset,testset[x],k) 
      result = getresponse(neighbours) 
      predictions.append(result) 
      print('>Predicted=' +repr(result)+', actual=' + repr(testset[x][-1])) 
    accuracy = getaccuracy(testset, predictions) 
    print('Accuracy: '+repr(accuracy)+'%') 

ある

#-- KNN Classifier Functions ---------- 
def loaddataset(): 
    global trainingset 
    with open('imudata.csv','rb') as csvfile: 
      lines = csv.reader(csvfile) 
      dataset = list(lines) 
      for x in range(len(dataset)): 
        trainingset.append(dataset[x]) 

def euclideandistance(instance1,instance2,length): 
    distance = 0 
    for x in range(length-1): 
      instance1[x] = float(instance1[x]) 
      instance2[x] = float(instance2[x]) 
    for x in range(length-1): 
      distance += pow((instance1[x]-instance2[x]),2) 
    return math.sqrt(distance) 

def getneighbours(trainingset,testinstance,k): 
    distances = [] 
    length = len(testinstance)-1 
    for x in range(len(trainingset)): 
      dist = euclideandistance(testinstance, trainingset[x],length) 
      #print(trainingset[x][-1],dist) 
      distances.append((trainingset[x],dist)) 
    #print(distances) 
    distances.sort(key=operator.itemgetter(1)) 
    #print(distances) 
    neighbours = [] 
    print('k='+repr(k)+'length of distances='+repr(len(distances))) 
    for x in range(k): 
      neighbours.append(distances[x][0]) 
    return neighbours 

def getresponse(neighbours): 
    classvotes = {} 
    for x in range(len(neighbours)): 
      response = neighbours[x][-1] 
      if response in classvotes: 
        classvotes[response] += 1 
      else: 
        classvotes[response] = 1 
    sortedvotes = sorted(classvotes.iteritems(), key=operator.itemgetter(1), reverse=True) 
    return sortedvotes[0][0] 

def getaccuracy(testset, predictions): 
    correct = 0 
    for x in range(len(testset)): 
      if testset[x][-1] is predictions[x]: 
        correct +=1 
    return ((correct/float(len(testset))) * 100.0) 
#------- END of KNN Classifier Functions ------------- 

マイ比較主な機能はされ

Train set: 20 
Test set: 1 
k=20 length of distance=20 
>Predicted='A', actual='B' 
Accuracy: 0.0% 

私のサンプル・データ・パケット:

-1.1945864763443935e-16,1.0000000000000031,0.81335962823925234,1.2678119727931405,4.6396523259663871,3,1.0000000000000013,108240.99999999988,328.99999999999966,4.3008487686466931e-16,1.000000000000002,0.73006871826334618,0.88693535629714804,4.3903300136708818,15,1.0000000000000011,108240.99999999977,328.99999999999932,1.990977460573989e-16,1.0000000000000009,0.8120281400849243,1.3556881217171162,4.2839744646260876,9,1.0000000000000004,108240.99999999994,328.99999999999983,-3.4217816017322454e-16,1.0000000000000009,0.7842111273340705,1.0882622268942712,4.4762484049613418,4,1.0000000000000004,108241.00000000038,329.00000000000114,2.6996304550155782e-18,1.000000000000004,0.76504908035654873,1.1890598964371606,4.2138613873737967,7,1.000000000000002,108241.0000000001,329.00000000000028,7.154020705791282e-17,1.0,0.83945423805187047,1.4309844267934049,3.7008217934312198,6,1.0,108240.99999999983,328.99999999999949,-0.66014932688009009,0.48967404184734276,0.083592048161537938,A 

私は、ハードウェアから午前について多くを知りませんKNN、その理由は私が求めている私のコードに修正がある場合はg。hereというデータセットを追加しました。

+1

これはなぜラズベリーと関係があるのか​​分かりません。プラットフォームに依存しないPythonだけです。とにかく、このコードを入手した虹彩データセットでコードを試しましたか?それから同じ結果を得て、自分のデータに適用します。いずれにしても、どのコードからでも誰もあなたのコードをテストしてテストすることはできません。また、コードを修正しようとする人がいれば、トレーニングデータセットを表示する必要があります。 – barny

+0

@barny、サンプルデータセットを追加しました。ハードウェアからのもので、KNNについてよく知っているわけではありませんが、コードがあれば修正を求めています。 –

+0

虹彩データセットを使用して虹彩サンプルと同じ結果が得られることを確認してコードを確認しましたか? – barny

答えて

0

私はあなたのデータからサンプルの数が非常に少ないことを確認できました。予測精度に影響を与える可能性のあるフィーチャの数とサンプル数が非常に高くなる必要があります。すべてを正しく予測することは期待できません。アルゴリズムは独自の精度を持っています。虹彩のような他のよく知られているデータセットを使ってこのコードの正しさをチェックしようとするか、scikit learn pythonの組み込みknnクラシファイアを使ってみてください。

関連する問題