电子商务推荐系统中knn算法的最优k是多少



我正在尝试使用k近邻算法在毕业设计应用程序中创建推荐系统

我制作了一个项目推荐系统,根据产品评级向活跃用户推荐产品
我的数据集是从数据库中填充的矩阵,列表示系统的用户,行表示系统中的产品,矩阵中填充了每个用户的每个产品的评级值。作为以下示例数据集示例,但就我而言,有产品而不是电影。

现在有17个产品(行(和12个用户(列(。但我想要一个精确的通用方法来找到k。

我写了下面的代码来寻找k,我使用k=sqrt(n(/2作为一个等式来寻找一个好的k值(n表示应用程序中的产品数量(。但我想要更准确的方法来找到k值。所以请帮帮我。

k值:

private int determineK (int n) {
String sizeString = Integer.toString( n ) ;
double sizeDouble = Double.parseDouble( sizeString );
double root = Math.sqrt( sizeDouble );
double rawK = root / 2 ;
int num = Math.round( ( float )rawK ) ;
if ( num%2 != 0 ) {
return num ;
}
else {
return num + 1 ;  //odd
}
}

使用交叉验证和迭代多个值,您总是可以根据经验找到一个好的k值。

通过与(比如10%(的交叉验证,对于k的每个候选,你在90%的样本上训练数据,并在剩余的10%上进行测试(对于每个不同的"测试"集,重复10次,以获得更具统计意义的结果(。从每个候选者中,您可以获得准确度/召回率曲线,并可以基于该曲线确定您的最佳k

最新更新