电子商务推荐系统中 knn 算法的最佳 k 是多少
what is the optimal k for knn algorithm in ecommerce recommendation system
我正在尝试使用 k 最近邻算法在我的毕业项目应用程序中制作推荐系统。
我做了一个项目推荐系统,根据产品评分向活跃用户推荐产品。
我的数据集是一个从数据库中填充的矩阵,列代表系统的用户,行代表系统中的产品,矩阵填充每个用户对每个产品的评分值。如下例dataset example
,但就我而言,有产品而不是电影。
现在有 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
}
}
您总是可以根据经验使用 cross validation 并迭代多个值来找到好的 k
值。
通过交叉验证(比如 10%),对于 k
的每个候选者,您在 90% 的样本上训练数据,并在剩余的 10% 上测试它(重复 10 次,对于每个不同的“测试”集以获得更具统计意义的结果)。
从每个候选人中,您会得到 precision/recall 曲线,并可以根据它确定您的最佳 k
。
我正在尝试使用 k 最近邻算法在我的毕业项目应用程序中制作推荐系统。
我做了一个项目推荐系统,根据产品评分向活跃用户推荐产品。
我的数据集是一个从数据库中填充的矩阵,列代表系统的用户,行代表系统中的产品,矩阵填充每个用户对每个产品的评分值。如下例dataset example
,但就我而言,有产品而不是电影。
现在有 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
}
}
您总是可以根据经验使用 cross validation 并迭代多个值来找到好的 k
值。
通过交叉验证(比如 10%),对于 k
的每个候选者,您在 90% 的样本上训练数据,并在剩余的 10% 上测试它(重复 10 次,对于每个不同的“测试”集以获得更具统计意义的结果)。
从每个候选人中,您会得到 precision/recall 曲线,并可以根据它确定您的最佳 k
。