我正在尝试用kNearestNeigbours做一个图像分类器。我有50节课,每节课我们有4张图片。我使用3个图像进行训练,1个用于测试。 我的代码:
def get_img_files(img_dir):
df = pd.DataFrame(filter(lambda x: ".JPG" in x, listdir(img_dir)), columns=["name"])
df["class"] = np.repeat(np.linspace(0, 49, num=50), 4) # number of files=200, number of classes=4
df["class"] = df["class"].astype("category")
return df
def extract_sift(df):
key_points, kp_descriptors = [], []
df_name = list(df["name"])
sift = cv2.SIFT(nfeatures=20)
for i in xrange(len(df)):
img = cv2.imread(join(img_dir, df_name[i]))
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kp, des = sift.detectAndCompute(img, None)
key_points.append(kp)
kp_descriptors.append(des.astype(np.uint16))
df["sift_kp"] = key_points
df["sift_kp_desc"] = kp_descriptors
return df
if __name__ == '__main__':
img_dir = '../data/uni/'
df = get_img_files(img_dir)
df = extract_sift(df)
X_train, X_test, y_train, y_test = train_test_split(df["sift_kp_desc"], df["class"], test_size=0.25, random_state=42)
knn = KNeighborsClassifier(n_neighbors=5, weights="distance", metric=cos_dist)
knn.fit(X_train, y_train)
print knn.score(X_test, y_test)
但我犯了个错误
Traceback (most recent call last):
File "/Users/manabchetia/Documents/PyCharm/horc/src/classifier.py", line 50, in <module>
print(knn.score(X_test, y_test))
File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/base.py", line 291, in score
return accuracy_score(y, self.predict(X), sample_weight=sample_weight)
File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/neighbors/classification.py", line 147, in predict
neigh_dist, neigh_ind = self.kneighbors(X)
File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/neighbors/base.py", line 316, in kneighbors
**self.effective_metric_params_)
File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 1078, in pairwise_distances
X, Y = check_pairwise_arrays(X, Y)
File "/Users/manabchetia/anaconda/lib/python2.7/site-packages/sklearn/metrics/pairwise.py", line 97, in check_pairwise_arrays
X.shape[1], Y.shape[1]))
ValueError: Incompatible dimension for X and Y matrices: X.shape[1] == 50 while Y.shape[1] == 150
我该怎么修?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐