推荐系统1

推荐系统常常用于推荐给用户可能喜欢的产品,或者推荐给用户可能会喜欢的电影等等场景,一般推荐系统的建立是基于数据的。

理解近邻的概念NN:

近邻的概念就是一个实体与另外一个实体之间很相似,我们称之为近邻。for example:

上图是A,B,C三个用户的体重,我们发现:

 class Program
    {
        static void Main(string[] args)
        {
            int a = 60;
            int b = 62;
            int c = 90;
            Console.WriteLine("已知条件:*********************************************************************");
            Console.WriteLine(String.Format("a的体重是:{0}kg", a));
            Console.WriteLine(String.Format("b的体重是:{0}kg", b));
            Console.WriteLine(String.Format("c的体重是:{0}kg", c));
            Console.WriteLine("计算结果:*********************************************************************");
            Console.WriteLine(String.Format("a和b相差:{0}kg", Math.Abs(a - b)));
            Console.WriteLine(String.Format("a和c相差:{0}kg", Math.Abs(a - c)));
            Console.WriteLine(String.Format("b和c相差:{0}kg", Math.Abs(c - b)));
            Console.WriteLine("得出结论:*********************************************************************");
            Console.WriteLine("a和b的差异更小,所以a和b更接近");
            Console.Read();
        }
    }

如此看来,A和B的体重更为接近,我们认为他们是近邻,也就是说他们之间更加相似。

我们再添加一个属性:

A和B之间的“”距离“”就可以使用欧氏距离的算法进行计算啦:

但是单纯的这种计算也会引发误区:

我们按照计算发现,A和C好像更加接近,但是直觉告诉我们,B和C才是最接近的,因为他们的齿轮数是一样的。

 

这个时候需要引入正则化概念:

正则化就是,将所有的变量归一化到同样的尺度的方法。对于不同的属性,类似于上面的表格中,汽车的运行速度的值是100和110,而齿轮的数目确实4和5,二者数值相差很大。所以我们需要将运行速度和齿轮数目正则化到相同的尺度上进行比较。

 

常用的正则化的方法有:

1.将变量除以当前属性中最大值。

2.将变量减去均值,再除以标准差。

3.将每个变量除以最大值和最小值的差。

K近邻算法(KNN)

KNN就是找到与当前实体最接近的K个实体,由这K个实体投票表决,决定到底是否推荐给当前的实体。

假如,和当前实体最接近的10个实体中,有9个实体都购买了某件商品,那么,我们将选择把这件商品推荐给当前的实体。

又例如,和当前实体最接近的10个实体中,只有一个实体喜欢某一部电影,其余9个实体不喜欢这部电影,那么我们将选择不把当前的这部电影推荐给当前的实体。

这种推荐方式就是一种协同过滤的方式进行推荐。

猜你喜欢

转载自blog.csdn.net/Day_and_Night_2017/article/details/84673269