资源预览内容
第1页 / 共68页
第2页 / 共68页
第3页 / 共68页
第4页 / 共68页
第5页 / 共68页
第6页 / 共68页
第7页 / 共68页
第8页 / 共68页
第9页 / 共68页
第10页 / 共68页
亲,该文档总共68页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
机器学习算法介绍,基本概念分类,监督式学习 多轮学习以达到目的:实现回归或分类 非监督式学习 特定方法实现聚类。(由于目的性不明确,所以一般没有多轮) 强化学习 不断学习,永无止境,分类算法 适用因变量为离散变量 回归算法 适用因变量为连续变量,聚类和分类的差别 聚类:无限种类别可能 分类:有限种类别可能,监督式学习,工作机制 这个算法由一个目标变量或结果变量(或因变量)组成。 此变量由已知的一系列预示变量(自变量)预测而来。 利用这一系列变量,我们生成一个将输入值映射到期望输出值的函数。 这个训练过程会一直持续,直到模型在训练数据上获得期望的精确度。 例子 线性回归,决策树,SVM,K 近邻算法,逻辑回归 等,非监督式学习,工作机制 没有任何目标变量或结果变量要预测或估计。 用在不同的组内聚类分析。 例子 关联算法, K 均值算法,强化学习,工作机制 训练机器进行决策。 机器被放在一个能让它通过反复试错来训练自己的环境中。 机器从过去的经验中进行学习,并且尝试利用了解最透彻的知识作出精确的判断。 例子 马尔可夫决策过程,十大机器学习算法,1、线性回归 2、逻辑回归 3、决策树 4、SVM 5、朴素贝叶斯 6、k-Means算法 7、kNN算法 8、Apriori算法 9、最大期望算法(EM) 10、PageRank,监督式学习与非监督式学习的差别,监督式学习方法,要求: 事先明确知道各个类别的信息 所有待分类项都有一个类别与之对应 如果不能满足上述两个条件(例如有海量数据),则需适用聚类算法,即非监督式学习。,线性回归,适用场景 根据连续变量估计实际数值(房价、呼叫次数、总销售额等)。 原理 可通过拟合最佳直线来建立自变量和因变量的关系。拟合结果是条直线 Y= a *X + b:其中Y是因变量,a是斜率,x是自变量,b是截距 最佳直线叫做回归线。系数 a 和 b 通过最小二乘法获得。 Python代码,from sklearn import linear_model x_train=input_variables_values_training_datasets y_train=target_variables_values_training_datasets x_test=input_variables_values_test_datasets linear = linear_model.LinearRegression() linear.fit(x_train, y_train) linear.score(x_train, y_train),线性回归,针对线性回归容易出现欠拟合的问题,采取局部加权线性回归。 在该算法中,赋予预测点附近每一个点以一定的权值,在这上面基于波长函数来进行普通的线性回归.可以实现对临近点的精确拟合同时忽略那些距离较远的点的贡献,即近点的权值大,远点的权值小,k为波长参数,控制了权值随距离下降的速度,越大下降的越快。,线性回归,针对数据的特征比样本点多的问题: 一、岭回归 二、前向逐步回归,逻辑回归,#Import Library from sklearn.linear_model import LogisticRegression #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset # Create logistic regression object model = LogisticRegression() # Train the model using the training sets and check score model.fit(X, y) model.score(X, y) #Predict Output predicted= model.predict(x_test),逻辑回归,基于最优化方法的最佳回归系数确定: 梯度下降法-随机梯度下降法(根据梯度更新权重) 牛顿法或拟牛顿法(最大熵模型),决策树,使用场景 这个监督式学习算法通常被用于分类问题。 它同时适用于分类变量和连续因变量。 原理 在这个算法中,我们将总体分成两个或更多的同类群。 这是根据最重要的属性或者自变量来分成尽可能不同的组别。 回归树预测值为叶节点目标变量的加权均值 分类树某叶节点预测的分类值应是造成错判损失最小的分类值。,细说决策树(1)混乱度判断,熵 熵:E = sum(-p(I)*log(p(I),I=1:N(N类结果,如客户是否流失) 所有样本都属于一个类别I(最整齐),那么熵为0,如果样本完全随机,那么熵为1 信息增益 信息增益:原样本的熵-sum(区分后的各部分熵),增益越大表示区分的方法越好 Gain(Sample,Action) = E(sample) - sum(|Sample(v)|/Sample * E(Sample(v) 除了熵以外,还有GINI不纯度,错误率两种计算混乱度的方法,定义不同但效果类似。,细说决策树(2)建构树,生成树 (1) 从根节点t=1开始,从所有可能候选S集合中搜索使不纯性降低最大的划分S; (2)使用划分S将节点1(t=1)划分成两个节点t=2和t=3; (3)在t=2和t=3上分别重复划分搜索过程 终止树 (1)节点达到完全纯性; (2)树的深度达到用户指定的深度; (3)节点中样本的个数少于用户指定的个数; (4)异质性指标下降的最大幅度小于用户指定的幅度。,细说决策树(3)剪枝prune,当分类回归树划分得太细时,会对噪声数据产生过拟合作用。因此我们要通过剪枝来解决。剪枝又分为前剪枝和后剪枝: 前剪枝:在构造树的过程中就知道那些节点需要减掉,及早的停止树增长。 后剪枝:在构造出完整树之后再按照一定方法进行剪枝,方法有:代价复杂性剪枝、最小误差剪枝、悲观误差剪枝等等。,决策树代码,defcreateTree(dataSet,labels): classList=example-1forexampleindataSet#将最后一行的数据放到classList中 ifclassList.count(classList0)=len(classList): returnclassList0 iflen(dataSet0)=1:#这里为什么是1呢?就是说特征数为1的时候 returnmajorityCnt(classList) bestFeat=chooseBestFeatureToSplit(dataSet) print(bestFeat) bestFeatLabel=labelsbestFeat#运行结果nosurfacing myTree=bestFeatLabel:#运行结果nosurfacing: del(labelsbestFeat) featValues=examplebestFeatforexampleindataSet#第0个特征值 uniqueVals=set(featValues) forvalueinuniqueVals: subLabels=labels: myTreebestFeatLabelvalue=createTree(splitDataSet (dataSet,bestFeat,value),subLabels) returnmyTree,Python代码,支持向量机,适用场景 这是一种统计分类及回归分析方法 算法 支持向量机将向量映射到一个更高维的空间里, 在这个空间里建立有一个最大间隔超平面。 在分开数据的超平面的两边建有两个互相平行的超平面, 分隔超平面使两个平行超平面的距离最大化。 假定平行超平面间的距离或差距越大, 分类器的总误差越小。,支持向量机,支持向量机优缺点,优点: (1)非线性映射是SVM方法的理论基础,SVM利用内积核函数代替向高维空间的非线性映射; (2)对特征空间划分的最优超平面是SVM的目标,最大化分类边际的思想是SVM方法的核心; (3)支持向量是SVM的训练结果,在SVM分类决策中起决定性作用。因此,模型需要存储空间小,算法鲁棒性( Robust )强。 缺点: (1) SVM算法对大规模训练样本难以实施 (2) 用SVM解决多分类问题存在困难 经典的支持向量机算法只给出了二类分类的算法,而在数据挖掘的实际应用中,一般要解决多类的分类问题。,朴素贝叶斯,#Import Library from sklearn.naive_bayes import GaussianNB #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset # Create SVM classification object model = GaussianNB() # there is other distribution for multinomial classes like Bernoulli Naive Bayes, Refer link # Train the model using the training sets and check score model.fit(X, y) #Predict Output predicted= model.predict(x_test),朴素贝叶斯,算法 对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。 自变量:x=a1,a2,.,an 因变量:假设我们的结论有True/False两种 根据样本可得到p(a1|T), p(a2|T), ., p(an|T), p(a1|F), p(a2|F), ., p(an|F) 我们想比较p(T|x)和p(F|x),则根据贝叶斯定理: p(T|x)=p(x|T)*p(T)/p(x)=p(a1|T)*p(a2|T)*.*p(an|T)*p(T)/p(x) p(T|x)*p(x)=p(x|T)*p(T)=p(a1|T)*p(a2|T)*.*p(an|T)*p(T) p(F|x)*p(x)=p(x|F)*p(T)=p(a1|F)*p(a2|F)*.*p(an|F)*p(F) 由此得出x情况下T的概率和F的概率。,KNN(K最邻近算法),适用场景 该算法可用于分类问题和回归问题。然而,在业界内,K最近邻算法更常用于分类问题。 原理 K最近邻算法是一个简单的算法。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去。 这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离。 前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量。,KNN(K最邻近算法),实现流程 (1)计算已知类别数据集中的点与当前点之间的距离 (2)按照距离递增次序排序 (3)选取与当前点距离最近的k个点 (4)确定前k个点所在类别的出现频率 (5)返回前k个点出现频率最高的类别作为当前点的预测分类,Python代码,#Import Library from sklearn.neighbors import KNeighborsClassifier #Assumed you have, X (predictor) and Y (target) for training data set and x_test(predictor) of test_dataset # Create KNeighbors classifier object model KNeighborsClassifier(n_neighbors=6) # default val
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号