我正试图使用SciKit Learning Linear Discriminative Analysis包,根据已知坐标为标签分配坐标。训练坐标和标签存储在一个panda数据帧中,目标坐标存储在另一个pandas数据帧中。两个数据帧的行长度不相等,训练集较大。我想在原始数据帧中的坐标上应用标签,用作pd.merge.的密钥
我知道我可以使用多边形或Shapely中的matplot点来解决这个问题,但我想用这种方式来测试它。以下是我基于文档的内容
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)
我认为您被目标和测试弄糊涂了。之所以出现错误,是因为分类器需要一个一维的标签数组——在您的情况下,是邮政编码。如果没有看到你的数据,我不能肯定,但你可能想做
clf.fit(trainingdata, labels_fea)
然后将targetdata
重命名为testdata
,您可以使用clf.predict(testdata)
测试您的模型