我有一个按时间和个人的增长率数据集。我试图使用KNN根据其他人的历史增长来预测增长率。 p>
首先,我转换了我的事务级数据集,以便每行代表一个人,列是时间(以天为单位)。我想找到具有最接近值的个人,
这是我的示例代码:
from sklearn.neighbors import NearestNeighbors
import pandas as pd
neigh = NearestNeighbors(n_neighbors=5, metric = 'euclidean')
df = pd.DataFrame([['A',1,1,.2],['A',1,2,.25],['A',1,4,.3],['B',0,1,.5],['B',0,3,.52],['B',0,2,.51]
,['C',1,1,1.1],['C',1,2,1.3],['C',1,4,1.5]],columns = ['Cust_ID','Gender_Male','Day_No','Value'])
df_unstacked = df.set_index(['Cust_ID','Gender_Male','Day_No']).unstack()
print df_unstacked
Day_No 1 2 3 4
Cust_ID Gender_Male
A 1 0.2 0.25 NaN 0.3
B 0 0.5 0.51 0.52 NaN
C 1 1.1 1.30 NaN 1.5
neigh.fit(df_unstacked) #Throws error:
ValueError: Input contains NaN, infinity or a value too large for
dtype('float64').
如何构建此数据以避免错误值丢失?我不想要估算值 - 我希望它只计算存在的值的距离。 如果我输入一个示例行,我希望能够每天找到附近邻居的平均值
我知道这是可能的,因为我之前已经使用推荐系统和稀疏数据完成了它,但我不熟悉sklearn KNN语法以及如何在计算时使用它来跳过NaN值距离/相似性。