日撸java三百行day60

文章目录

  • day60 小结
    • 1.各算法回顾
      • 1.1 KNN分类器
      • 1.2 基于 M-distance 的推荐
      • 1.3 kMeans 聚类
      • 1.4 Naive Bayes 算法
    • 2.学习各类算法后的感悟
    • 3.leave-one-out测试
    • 4.从举例子出发
    • 5.Debug代码

day60 小结

1.各算法回顾

1.1 KNN分类器

KNN分类器是监督学习算法,对于一个数据样本,通过KNN算法,计算这个数据样本到其他的训练集样本的距离(如欧式距离或曼哈顿距离),选择距离最近的K个作为自己的邻居,再进行投票预测这个新的数据样本类别。(如果测试集和训练集规模小还好,如果数据规模大了,每次都便利求到所有训练集的距离,那开销有点太大了。)跳转至文章

1.2 基于 M-distance 的推荐

KNN预测以测试样本和训练样本的距离的远近来找k个最相似似的邻居,对这k个邻居评分来预测测试样本的类别。而M-distance是根据平均分来计算两个用户 (或项目) 之间的距离,找到在给定的半径范围内的邻居,来预测样本。跳转至文章

1.3 kMeans 聚类

无监督的机器学习算法,其中k是划分为几个簇,并且选择k个数据作为不同簇的聚类中心,计算每个数据样本和聚类中心的距离(欧式距离或曼哈顿距离)并将数据样本分配给离聚类中心最近的类别。在遍历完所有数据后,则可以把数据集分成k个簇,对每个簇又要重新计算他的聚类中心(求平均值)。我们会进行多次迭代,直到聚类中心不变或者是到达一定次数的迭代。跳转至文章

1.4 Naive Bayes 算法

Naive Bayes 算法假设特征之间的条件独立性,计算给定特征条件下的类别的后验概率来进行分类。大致意思就是给一个数据样本,我计算在不同类别下的一个特征值组合的概率,那个类别的概率值大就将起分给那一类别。跳转至文章

KNN分类器,Naive Bayes 算法能处理分类的问题,需要标记类别,而kMeans将数据划分为不同的簇,不需要标记类别信息(虽然我在输入的样本中有类别,但没用)

2.学习各类算法后的感悟

什么是机器学习?我目前理解的机器学习就是根据已有的数据去学习,去发现数据中的规律从而去让机器能自动进行学习,预测和进行决策。就好像我们人类,从小我们大脑就不断在接收信息世界那么多事物,在不断的学习,我们能区分不同动物,不同的车等等等,但是呢,即使人工智能再厉害,我还是认为他不会超越人类的。
在刚开始学习这些算法的时候,还是花了不少时间,理解了理论知识,再debug代码去看代码思路,在这一步步的过程中算在慢慢了解机器学习算法,其实在我们生活中,经常会有机器学习的身影,比如某音会根据你个人兴趣猜你喜欢看的视频,某宝会根据你个人喜爱程度猜你喜欢的东西等等。很明显这些软件用了机器学习的算法,可以根据用户买的商品内容或者逛的商品内容时间长短去获取相应的标签,属性等去推荐相似的东西,对用户喜爱的东西进行排序来筛选他们的优先级等等,想要机器猜得正确率高些,还是得多“喂”他数据才行。毕竟我也才开始入门,这些应该都是基础中的基础,肯定还有更复杂的算法,还有更多需要学习,比如机器算法他们之间性能差异?如何结合实际情况选择算法且进行调优呢?

3.leave-one-out测试

这个测试方法我也是在这段时间的学习中知道的,留下一个作为测试样本,其他都是训练样本,然后每个数据样本都轮流当一次测试样本,去判断这个学习模型性能怎么样。这样的好处就是每个样本都能作为测试样本,可以更全面的评估这个学习模型。但是我在想,数据量大的时候,用这个测试不合适了吧,毕竟跑一次是1 VS n-1,而且中间还有数据处理,决策等,进行n次1 VS n-1有点不值得。例如我们的knn,我们的数据样本成千上万好像就不适合了,但是文章中也给出了一种方法就是我们按一定的比例划分测试集和训练集,可以按比例,也可以随机分。

4.从举例子出发

我在学习 Naive Bayes 算法时,需要结合一些概率论知识,单独去看这些公式推导还是有些枯燥,但是我在学习的过程中,结合着一个小例子,尝试着带入理解,很快就能理解一个大致思想,再逐渐去思考一些细节上的东西,真的就是一种事半功倍的感觉。所以在学习一些有难度的东西,从举一个合适的例子不失为一种好方法。先要知道他到底是什么,才能继续去思考为什么是这样,还可以怎么样。

5.Debug代码

在学习这些算法的过程中,因为算法调用的方法比较多,如果直接去看代码,很容易思想上出小差,所以debug代码可以随时看到数据的变化,更有利于帮助理解,也更容易去排查bugx信息。

你可能感兴趣的:(算法,聚类,机器学习,java,人工智能)