数据挖掘常用算法
数据挖掘常用算法
逐步补充中...
特征工程
特征工程在实践中是很重要的一个环节,其中主要是特征提取(从原始数据中生成特征,原始数据以及特征的好坏直接决定了我们的算法效果上限)和特征选择(选择重要的特征,比如分类的话选择和标签相关性高的特征,这样可以降低算法的运行时间和降低过拟合风险等...,但还是看算法)
https://www.zhihu.com/question/28641663里面对特征工程做了些简单介绍
数据预处理
主要关注这几个方面:
1. Data Cleaning: 数据清洗(处理噪音、缺失数据等)
2. Normalizaion:数据标准化
3. Data Reduction: Dimension Reduction(降维)、Numerosity Reduction(数据量约减)
4. Data Transformation And Discretion:进行数据平滑、标准化、离散化、概念层次概化(concept hierarchies generation)等
降维中使用到的比较有趣的方法:PCA(principal component analysis),我写的另一篇文章有个简单的数学原理介绍
频繁模式挖掘
1. Apiori
2. FP-Tree
分类
1. 决策树、随机森林(决策树+bagging+feature random selection)、gradient boost tree(GBT):随机森林效果不错然后使用简单,使用得较为广泛
2. 朴素贝叶斯:基于贝叶斯定律和特征属性之间都彼此独立的假设,如果属性之间彼此不独立,比如AB、。还简单提到了一个bayesian belief network,计算先验概率后验概率。
3. SVM:目标
4. 神经网络
5. ensemble method:应用bagging(leave-p-out、k-fold等)和boosting(抽样时给予分类错误的样本更大的抽样权重,方法有AdaBoosting等)方法,训练多个分类器,结合多个分类器来给出更好的预测结果
6. knn等lazy learners
聚类
1. kmeans、kmedoid
2. hierarchical clustering(层次聚类):agglomerative(自底向上)、divisive(自顶向下)
3. DBSCAN、OPTICS
4. gaussian mixture models(高斯混合模型):假设数据点属于多个cluster,使用EM算法逐步增大模型的最大似然函数值
5. BiClustering
6. spectual clustering(谱聚类)、PIC(power iteration clustering,幂迭代聚类):可以用于子图切分,spark mlib提供了PIC的实现
7. Clustering with constraint
异常检测(outlier detection)
1. 基于统计的方法(又分为有参或无参方法)
2. 基于相似度的方法(grid-based、distance-based、density-based比如LDA)
3. 基于聚类(方法复杂度可能比较高)
4. 基于分类(可以使用随机森林等,但要对分类高度不均匀(highly imbalanced)的数据进行处理,使用over-sampling或under-sampling或两者结合使用(https://www.analyticsvidhya.com/blog/2017/03/imbalanced-classification-problem/)
推荐
1. content-based:确定产品或用户的特征,计算相似程度进行推荐
2. collaborative filtering(协同过滤):不是通过特征而是通过用户的行为来找到相似的用户,从而根据相似用户的行为给用户进行推荐
3. local sensitive hashing(LSH,局部敏感哈希):快速找到用户相似度的方法
图算法
1. PageRank:大名鼎鼎的pagerank
2. SimRank(根据用户对每一个item进行rank):类似于pageRank,公式有点不一样
其他一些有趣的主题(懒得分类了)
1. Bloom filter:常用于数据存储等领域,可快速了解数据是否存在,只有FN错误没有FP,FN可以随着hash函数的增加和桶大小的增加而降低
2. batch-kmeans、streaming-kmeans