我正在尝试使用SciKit-learn线性判别分析包,根据已知坐标标记为标签指定坐标。训练坐标和标签存储在一个pandas数据框中,目标coordiantes存储在另一个pandas数据框中。两个数据帧的行长不相等,训练集更大。我想在原始数据帧中的坐标上应用标签,以用作pd.merge的键。
我知道我可以使用多边形或Shapely中的matplot点来解决这个问题但是想以这种方式测试它。这是我基于docs
的内容from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
labels_fea = le.fit_transform(Spatial_index['Postcode'])
trainingdata=df1[['xcoord','ycoord']].values
targetvalues=df2[['xcoord','ycoord']].values
clf = LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None,
n_components=None, store_covariance=False, tol=0.0001)
然后执行如下,
clf.fit(trainingdata,targetvalues)
这会引发以下错误,
ValueError: bad input shape (8860, 2)
答案 0 :(得分:0)
我认为您对目标和测试感到困惑。错误正在发生,因为分类器需要一个一维的标签数组 - 在您的情况下,是邮政编码。如果没有看到您的数据,我无法确定,但您可能想要这样做
clf.fit(trainingdata, labels_fea)
然后将targetdata
重命名为testdata
,您将获得使用clf.predict(testdata)