私はGoogleのクラウドプラットフォームmlのエンジンのsklearnから簡単なのk最近傍アルゴリズムを実装したと混同します。私は2つの入力ベクトル間の距離を計算するカスタムメトリックを使用して、距離が2つのベクトル間の要素ごとの二乗差の要素の加重和であるようにしました。コードは以下である:は本当にこのnumpyの形状の不一致エラー
import os.path
from sklearn import neighbors
import numpy as np
from six.moves import cPickle as pickle
import tensorflow as tf
from tensorflow.python.lib.io import file_io
flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_string('input_dir', 'input', 'Input Directory.')
flags.DEFINE_string('input_train_data','train_data','Input Training Data File Name.')
pickle_file = os.path.join(FLAGS.input_dir, FLAGS.input_train_data)
def mydist(x, y):
return np.dot((x - y) ** 2, weight)
with file_io.FileIO(pickle_file, 'r') as f:
save = pickle.load(f)
train_dataset, train_labels, valid_dataset, valid_labels = save['train_dataset'], save['train_labels'], save[
'valid_dataset'], save['valid_labels']
train_data = train_dataset[:1000]
train_label = train_labels[:1000]
test_data = valid_dataset[:100]
weight = [1.0]* len(train_dataset[1])
knn = neighbors.KNeighborsRegressor(weights='distance', n_neighbors=20, metric=lambda x, y: mydist(x, y))
knn.fit(train_data, train_label)
predict = knn.predict(test_data)
print(predict)
train_dataset形状(86667,13)とvalid_datasetのnumpyのアレイ形状(8000,13)を有しています。 Train_labelsには形状(86667,1)とvalid_labels(8000,1)があります。私は次元のミスマッチを得たいくつかの理由:
line 15, in mydist return np.dot((x - y) ** 2, weight) ValueError: shapes
(10,) and (13,) not aligned: 10 (dim 0) != 13 (dim 0)
カスタムメトリックの入力におけるxとyの両方がサイズ13を持っている必要があり、まだ何とか彼らはサイズ10を持っている誰もがここで間違っているかを説明することはできますか?
「重量」の形状とは何ですか?また、私はKNeighborRegressor関数に慣れていませんが、どこでxとyを指定するのですか? – BenT
重量は、私がKNeighborsRegressorのインスタンス化にメトリック引数にカスタムメトリック機能mydistを入れて長さ13とのリストです。 –