我正在数据框上运行KNN模型,试图预测某个特征。我试图根据是否要迭代的行来查看是否可以查看所找到的特定“邻居”是否可以拥有我定义的特定布尔值。
例如,假设我要遍历作者的数据框,我想根据书中的页数和章节数来预测他们的书的价值。但是,在我的示例中,我只想比较相同AGE的作者,并根据相同年龄的作者得出预测。我假设我需要在代码中的某个地方放置一个布尔值,但我不确定在哪里?
import pandas as pd
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import mean_squared_error
features = ['chapters','pages']
knn = KNeighborsRegressor(n_neighbors=16, algorithm='brute')
knn.fit(train[features], train['value'])
predictions = knn.predict(test[features])
这里是数据框“测试”:
author age pages chapters value
green 34 324 10 9
white 21 432 24 6
smith 59 567 43 3
berg 34 229 8 11
carter 34 213 10 9
bing 21 501 34 15
moon 59 132 7 7
因此,我想找到作者格林的所有KNN,但只找到与他年龄相同的34岁的KNN。当要成为白人作者时,只能找到年龄相同的21岁的KNN。换句话说,我需要使KNN的年龄==它要预测的作者的年龄。
显然,我在Sklearn模型文档中找不到所需的功能。您可以使用以下内容:
df.loc[df['age'] == 34]
或
df_agerange1 = df.loc[df['age'].between(25, 34)]
根据年龄范围训练多个模型(例如,将它们存储在字典中,并根据测试示例的年龄使用正确的模型进行预测。
for i, d in test.iterrows():
age = d['age']
models[age].predict(d[features])
我知道这在计算上既昂贵又不太干净,但是可以使用。
另一种方法可能是从头开始实现自己的KNN版本,并将年龄限制添加到预测函数中。
此外,如果您希望年龄重要,但是您对此并不十分严格,则可以将年龄作为功能添加。