

以下のコードを実行したいのですがエラーが出てしまいます。  
解決方法を教えていただけると幸いです。  
元のコードは[data-science-from-
scratch/nearest_neighbors.py](https://github.com/joelgrus/data-science-from-
scratch/blob/master/code/nearest_neighbors.py)にあります。  
現在Pythonを学び始めたばかりなのですが、したいこととしてはk近傍方でk=1,3,5,7でどのような結果になるのか示したいと認識しています。

[code]

    import math
    
    def knn_classify(k, labeled_points, new_point):
        """each labeled point should be a pair (point, label)"""
        # order the labeled points from nearest to farthest
        by_distance = sorted(labeled_points,
                             key=lambda point_label: distance(point_label, new_point))
        # find the labels for the k closest
        k_nearest_labels = [label for _, label in by_distance[:k]]
        return majority_vote(k_nearest_labels)
    
    cities = [(-86.75,33.5666666666667,'Python'),(-88.25,30.6833333333333,'Python'),(-112.016666666667,33.4333333333333,'Java')]
    cities = [([longitude, latitude], language) for longitude, latitude, language in cities]
    
    for k in [1,3,5,7]:
        num_correct = 0    
        for city in cities:
            location,actual_language = city
            other_cities = [other_city for other_city in cities
                            if other_city != city]
            predicted_language = knn_classify(k, other_cities, location) 
            if predicted_language == actual_language:
                num_correct += 1
        print (k, "neighbor[s]", num_correct, "correct out of", len(cities) )
    
[/code]

上記のコードを実行した時に以下のようにエラーが表示されてしまいます。

[code]

    NameError                                 Traceback (most recent call last)
    <ipython-input-32-1bab7195f6b1> in <module>()
         26                         if other_city != city]
         27 
    ---> 28         predicted_language = knn_classify(k, other_cities, location)
         29 
         30         if predicted_language == actual_language:
    
    <ipython-input-32-1bab7195f6b1> in knn_classify(k, labeled_points, new_point)
          6     # order the labeled points from nearest to farthest
          7     by_distance = sorted(labeled_points,
    ----> 8                          key=lambda point_label: distance(point_label, new_point))
          9 
         10     # find the labels for the k closest
    
    <ipython-input-32-1bab7195f6b1> in <lambda>(point_label)
          6     # order the labeled points from nearest to farthest
          7     by_distance = sorted(labeled_points,
    ----> 8                          key=lambda point_label: distance(point_label, new_point))
          9 
         10     # find the labels for the k closest
    
    NameError: name 'distance' is not defined
    
[/code]


CC BY-SA 3.0
2017-04-14T14:04:35.477
34020
2017-04-17T13:26:37.947
2017-04-16T15:27:09.400
19110
22563
question
python
NameErrorが出る


python は詳しくないのですが…

`distance` メソッドは

[code]

    from linear_algebra import distance
    
[/code]

ここで宣言されているように、`linear_algebra.py` が必要です。  
(で、`linear_algebra.py` を読み込もうとすると、また他のものが芋づる式に必要になってくるのでしょうけど)

また、`majority_vote` メソッドも不足しているようですね。  
これは元のコード `nearest_neighbors.py` に含まれていますね。


CC BY-SA 3.0
2017-04-17T13:26:37.947
34076
2017-04-17T13:26:37.947
5288
34020
answer