2016-12-01 14 views
0

私はPythonで相互検証を実行しようとしています。私のデータセットのサイズは31x9です。私は評価のためにマトリックスをサイズ28と3のマトリックスに分割したいと思っています。さらに、テスト行列では、最後の2つの列をゼロに置き換えたいと考えています。私のコードは次のようである:Pythonの適切な相互検証と行列処理

def printme(training): 
    train_list = [] 
    test_list = [] 
    num_folds = 10 
    subset_size = len(training)/num_folds 
    for i in range(num_folds): 
      testing_this_round = training[i*subset_size:][:subset_size] 
      training_this_round = training[:i*subset_size] + training[(i+1)*subset_size:] 
      train_list.append(training_this_round) 
      new_test = testing_this_round 

      new_test[0][8] = 0 
      new_test[1][8] = 0 
      new_test[2][8] = 0 

      new_test[0][7] = 0 
      new_test[1][7] = 0 
      new_test[2][7] = 0 

      test_list.append(new_test) 

    return train_list, test_list 

クロスバリデーションが正常に動作するようです、しかし私はゼロに等しい検査行列の最後の2 columsnを作成しようとしていたとき、私は問題をentounted。私のコードはトレーニングマトリックスにも影響を与えるようです。どうすればこの問題を解決できますか?両方の戻り行列train_listとtest_listで、最後の2つの列がゼロに変更されました。

答えて

1

copyをインポートし、そのdeepcopy機能を使用することです。次に、あなたはそれがなく、2つの異なる名前を持つ、同じ行列だったので、実際にあなたのコードは、「も」トレーニングリストに影響を与えていなかった

testing_this_round = copy.deepcopy(training[i*subset_size:][:subset_size]) 

によって

testing_this_round = training[i*subset_size:][:subset_size] 

を交換する必要があります。詳細については、などをご覧ください。python variables are pointers?

関連する問題