机器学习
概论
-
基本分类:监督学习(分类,回归),无监督学习(聚类,降维),半监督学习(部分标注数据和大量未标注的数据),强化(增强)学习,深度学习(基于神经网络的分类和回归),迁移学习(在缺少数据的情况下,将其他领域知识迁移到另一个领域),结构化学习(输出的是对象,除了回归和分类以外的问题,如信息检索,对象匹配)
-
Sickit-learn常用函数分类
| | 应用 | 算法 |
| --------------------------- | -------------------- | --------------- |
| 分类(Classification) | 异常检测,图像识别等 | KNN,SVM |
| 聚类(Clustering) | 图像分割,群体划分等 | K-means,谱聚类 |
| 回归(Regression) | 价格预测,趋势预测等 | 线性回归,SVR |
| 降维(Dimension Reduction) | 可视化 | PCA,NMF |
-
相关书籍和课程:机器学习周志华,PRML-Bishop 在线课程:吴恩达,Stanford cs231n,Reinforcement learning David silver
-
分类任务(Classification):模型的输出是 一个向量(Vector)
回归函数封装的模块:sklearn.linear_model(线性函数为主)和sklearn.preprocessing(非线性函数为主)
分类算法的应用:
金融:贷款是否批准进行评估
医疗诊断:判断一个肿瘤是恶性还是良性
欺诈检测
网页分析:判断网页的类别
| 分类模型 | 加载模块 | 使用方式 |
| ---------- | ---------------------------- | --------------------------------------------------------- |
| 最近邻算法 | neighbors.NearestNeighbord | fit()利用数据进行训练,predict函数 |
| 支持向量机 | svm.SVC | |
| 朴素贝叶斯 | naive_bayes.GaussianNB | |
| 决策树 | tree.DecisionTreeClassifier | cross_val_score使用10则验证交叉,利用fit和predict进行验证 |
| 集成方法 | ensemble.BaggingClassifier | |
| 神经网络 | neural_network.MLPClassifier | |
-
回归任务(Regression):主要以linear_model模块,模型输出的是一个数值(scalar)
| 回归模型 | 加载模块 |
| ---------- | ------------------------------------------------------------ |
| 岭回归 | linear_model.Ridge |
| lasso回归 | linear_model.Lasso |
| 弹性网络 | linear_model.ElasticNet |
| 最小角回归 | linear_model.Lars |
| 贝叶斯回归 | linear_model.BayesianRidege(高斯朴素贝叶斯分类,多项式模型的朴素贝叶斯,多元伯努利朴素贝叶斯) |
| 逻辑回归 | linear_model.LogisticRegression |
| 多项式回归 | prprocessing.PolynomialFeatures |
-
聚类任务:主要以cluster模块为主,欧式距离,曼哈顿距离,马氏距离,余弦相似度
| 聚类方法 | 加载模块 |
| -------- | ------------------------------- |
| K-means | cluster.KMeans |
| AP聚类 | cluster.AffinityPropagation |
| 均值漂移 | cluster.MeanShift |
| 层次聚类 | cluster.AgglomerativeClustering |
| DBSCAN | cluster.DBSCAN |
| BIRCH | cluster.Birth |
| 谱聚类 | cluster.SpectralClustering |
sklearn.cluster
| 算法名称 | 参数 | 可扩展性 | 相似性度量 |
| ---------------- | ------------------------ | ------------------------------ | ---------------- |
| K-means | 聚类个数 | 大规模数据 | 点间距 |
| DBSCAN | 邻域大小 | 大规模数据 | 点间距 |
| Gaussian Mixture | 聚类个数及其他参数 | 复杂度高,不适合处理大规模数据 | 马氏距离 |
| Birch | 分支因子,阀值等其他超参 | 大规模数据 | 两点间的欧式距离 |
-
降维任务:主要以decomposition模块为主,数据的可视化和精简数据
| 降维任务 | 加载模块 |
| ------------ | --------------------------------------- |
| 主成分分析 | decomposition.PCA |
| 截断SVD和LSA | decomposition.TruncatedSVD |
| 字典学习 | decomposition.SparseCoder |
| 因子分析 | decomposition.FactorAnalsis |
| 独立成分分析 | decomposition.FastICA |
| 非负矩阵分解 | decomposition.NMF |
| LDA | decomposition.LatentDirichletAllocation |
| 算法名称 | 参数 | 可扩展性 | 适用任务 |
| -------- | -------------------- | ------------ | ------------------ |
| PCA | 所降维度以及其他超参 | 大规模数据 | 信号处理等 |
| FastICA | 所降维度以及其他超参 | 超大规模数据 | 图形图像特征提取 |
| NMF | 所降维度以及其他超参 | 大规模数据 | 图形图像特征提取 |
| LDA | 所降维度以及其他超参 | 大规模数据 | 文本数据,主题挖掘 |
-
训练数据和测试数据
a. 训练集(training set):构成监督学习经验的案例集合;
b. 测试集(test set):评估程序效果的案例集合;
c. 验证集(validation set):调整超参数变量的案例集合;超参数变量控制模型如何学习;
d. 监督学习的观测值分成三部分:训练集(50%),测试集(50%),验证集(25%);
e. 过度拟合(over-fitting)vs欠拟合:过度拟合是指能够在训练集上获得较好地拟合的假设,在训练集之外的案例集合却不能很好的拟合数据;原因是存在噪音或者训练数据太少;正则化(regularization)可以减轻过度拟合程度;
f. “放入的是垃圾,出来的也是垃圾”:监督学习需要用有代表性、标签正确的数据集进行训练;多而不好的数据,训练效果不一定比少而好的数据好。
g. 交叉验证:用相同的数据对算法进行多次训练和检验;适用于训练集不够的时候;数据训练集分成N块,算法用N-1块进行训练,再用最后一块进行测试
-
效果评估-偏差和方差
a. 监督学习中,两个基本指标评估预测误差:偏差(bias)和方差(variance);高方差是过度拟合了训练集数据,高偏差则是拟合不够的表现;
b. 偏差-方差均衡:现在中二者具有背反特征,降低一个指标,另一个指标会增加;
c. 无监督学习:没有预测误差,评估数据结构的一些属性;评估方法针对于具体的任务;
d. 无监督评估举例-恶性肿瘤预测(真阳性TP(true positive)+真阴性TN(true negative)+假阳性FP(false positive )+假阴性FN(false negative)):
准确度评估accuracy=(TP+TN)/(TP+TN+FP+FN);真阴性和真阳性即是预测都在先前的分类中
恶性肿瘤精确度precision=TP/(TP+FP)
召回率recall=TP/(TP+FN)
召回率比其他指标更满足实际要求;
-
岭回归:解决单纯线性回归中稀疏矩阵X^t X得到的值的失真问题
优化目标:
$$
argmin||Xtw-y||2 + a||w||^2
$$
对应的矩阵求解方法:
$$
w=(XTX+ai)-1X^TY
$$
-
强化学习就是程序或智能体(agent)通过与环境不断的进行交互学习,学习的目标就是使累计回报最大化;强化学习是一种试错学习,因其在各种状态(环境)下需要尽量尝试所有可以选择的动作,通过环境给出的反馈来判断动作的优劣,最终获得环境和最优动作的映射关系(即策略)
-
马尔可夫决策过程(MDP)
MDP基本元素
$$
\s\epsilon S:有限状态state集合,s表示某个特定的状态
a\epsilon A::有限动作action集合,a表示某个特定的动作
T(S,a,S")~Pr(s’|s,a):状态转移模型,根据当前状态s和动作a预测下一个状态s,这里的P表示从s采取行动a转移到s‘的概率。
$$
-
机器学习大量数据的工具:LibLinear和spark Mylib