K近邻模型:卡在特征上

问题描述 投票:0回答:1

我正在数据框上运行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的年龄==它要预测的作者的年龄。

python machine-learning knn
1个回答
0
投票

显然,我在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版本,并将年龄限制添加到预测函数中。

此外,如果您希望年龄重要,但是您对此并不十分严格,则可以将年龄作为功能添加。

© www.soinside.com 2019 - 2024. All rights reserved.