2016-07-17 6 views
0

私はK-nearest-neighborモデルの2つのバージョンを書いています。 2つの違いは、データがトレーニングとセカンドセットに分割され、すべてのデータが最初の(トレーニング/テストなし)で使用されるという点のみです。両方とも以下のような同じデータセットの一部を使用します。KNN in sklearn - クラスでKNeighborsRegressorを適切に使うには?

特徴データ(X)

[[33.499313000000001, 33.499313000000001], [43.238892999999997, 43.238892999999997], [43.252267000000003, 43.252267000000003], [43.251044999999998, 43.251044999999998], [43.2408748, 43.2408748], [42.9685074, 42.9685074], [43.030356099999999, 43.030356099999999], [43.014093000000003, 43.014093000000003], [43.017124000000003, 43.017124000000003], [43.017701000000002, 43.017701000000002], [43.015931000000002, 43.015931000000002], [43.013155699999999, 43.013155699999999], [43.014164000000001, 43.014164000000001], [43.017938700000002, 43.017938700000002], [43.093265000000002, 43.093265000000002], [43.090642000000003, 43.090642000000003], [43.0910607, 43.0910607], [43.110157100000002, 43.110157100000002], [43.077415000000002, 43.077415000000002], [43.096271000000002, 43.096271000000002], [43.103071900000003, 43.103071900000003], [43.100384099999999, 43.100384099999999], [43.0954975, 43.0954975], [43.092902899999999, 43.092902899999999], [43.091816000000001, 43.091816000000001], [43.096359, 43.096359], [43.107227000000002, 43.107227000000002], [43.101459800000001, 43.101459800000001], [43.075345267735997, 43.075345267735997], [43.103663300000001, 43.103663300000001], [43.100808000000001, 43.100808000000001], [43.090563099999997, 43.090563099999997], [43.090455900000002, 43.090455900000002], [43.095485500000002, 43.095485500000002], [43.103427000000003, 43.103427000000003], [43.090653000000003, 43.090653000000003], [43.082611, 43.082611], [43.0901268, 43.0901268], [43.095695999999997, 43.095695999999997], [43.095552599999998, 43.095552599999998], [43.087887000000002, 43.087887000000002], [43.108379900000003, 43.108379900000003], [43.106097200000001, 43.106097200000001], [43.092882000000003, 43.092882000000003], [43.095547199999999, 43.095547199999999], [43.099933499999999, 43.099933499999999], [43.092684599999998, 43.092684599999998], [43.107769300000001, 43.107769300000001], [43.096947399999998, 43.096947399999998], [43.094959000000003, 43.094959000000003], [43.104534999999998, 43.104534999999998], [43.099418399999998, 43.099418399999998], [43.095357, 43.095357], [43.097688300000002, 43.097688300000002], [43.057022699999997, 43.057022699999997], [43.092902899999999, 43.092902899999999], [43.095723999999997, 43.095723999999997], [43.075383000000002, 43.075383000000002], [43.057089900000001, 43.057089900000001], [43.084459600000002, 43.084459600000002]] 

応答データ(Y)

[3.5, 4.0, 4.0, 4.5, 4.0, 1.5, 2.0, 2.5, 4.5, 3.5, 5.0, 1.5, 3.5, 3.5, 4.0, 3.0, 3.0, 3.5, 4.5, 4.5, 5.0, 3.0, 3.0, 4.0, 3.5, 4.0, 3.5, 3.5, 3.0, 3.0, 5.0, 3.0, 3.0, 2.5, 3.5, 4.0, 5.0, 3.5, 2.5, 4.0, 2.5, 3.5, 3.5, 4.0, 1.5, 4.0, 4.5, 5.0, 4.0, 3.5, 2.0, 5.0, 5.0, 4.0, 3.5, 3.5, 4.0, 3.0, 3.0, 3.0] 

インポートモジュール

from sklearn.base import BaseEstimator, RegressorMixin 
from sklearn.neighbors import KNeighborsRegressor 
from sklearn.cross_validation import KFold 
from sklearn.cross_validation import train_test_split 

最初のモデル - ノースプリット

class LonLatClassifier(BaseEstimator, RegressorMixin): 
def __init__(self): 
    pass 

def fit(self, X, y): 
    self.knn = KNeighborsRegressor(n_neighbors = 9) 
    self.knn.fit(X, y) 
    return self   

def predict(self, X): 
    return self.knn.predict(X) 

私は次のコードでこのモデルをテストとして、それは私の予測スコアを与えます。

C = LonLatClassifier() 
print(C.score(X, y)) 

第2のモデルは - 私は、次のコードを実行すると、このモデルでは

class LonLatClassifier(BaseEstimator, RegressorMixin): 
def __init__(self, X_train, X_test, y_train, y_test): 
    self.xtrain = X_train 
    self.ytrain = y_train 
    self.xtest = X_test 
    self.ytest = y_test 
    pass 

def fit(self, X_train, y_train): 
    self.knn = KNeighborsRegressor(n_neighbors = 13) 
    self.fit = self.knn.fit(self.xtrain, self.ytrain) 
    return self 

def predict(self, X_test): 
    self.xtest = X_test 
    return self.knn.predict(self.xtest) 

分割して、それは私の予測またはスコアを与えるものではありません。

C = LonLatClassifier(X_train, X_test, y_train, y_test) 
C.predict(X_test) 

エラーメッセージは次のとおりです。

AttributeError       Traceback (most recent call last) 
<ipython-input-52-ecf778e90264> in <module>() 
----> 1 C.predict(X_test) 

<ipython-input-47-aeee765d2615> in predict(self, X_test) 
14  def predict(self, X_test): 
15   self.xtest = X_test 
---> 16   return self.knn.predict(self.xtest) 
17 

AttributeError: 'LonLatClassifier' object has no attribute 'knn' 

それがうまくいかないところ2つのモデルはデータsplitingでのみ異なっているように私は、明確ではないです。誰かが私が問題を特定し、それを修正する方法を提案するのを助けることができますか?どうもありがとうございました。

答えて

0

ご迷惑をおかけして申し訳ありません。これは、2番目のモデルでC.predict()を呼び出す前にC.fit()を呼び出さなかったためです。

この情報がより多くのユーザー層にとって有用であるかどうかはわかりません。私に知らせて、私はそれを取ることができます。ありがとうございました。

関連する問題