




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数据挖掘经典算法大全技术创新,变革未来智慧IT数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机K-均值聚类-简介 从无标签数据中组织数据的结构,从而对样本进行分组,是无监督学习的一种常用聚类方法。聚类示例将无标签的数据集分成两组输入数据不含任何标签将相似的样本划分为一个组K-均值聚类-简介原始数据集划分为2个簇划分为4个簇K-均值聚类-原理 K-means聚类算法流程可以分为四个步骤,需要注意几点:距离度量:欧氏距离、余弦相似度等质心计算:样本均值第1步. 从数据中随机选择K个对象作为初始聚类中心;第2步.计算每个聚类对象到聚类中
2、心的距离来划分K个簇;第3步.计算每个簇的质心作为新的聚类中心;第4步.重复步骤2、3,直到达到最大迭代次数,最后所有样本被分为K个簇。K-均值聚类-原理 K如何选择?K的选择一般是按照实际需求进行决定,或在实现算法时直接给定K值 。 距离度量给定样本 与,常用的距离度量有以下三种:闵可夫斯基距离(Minkowski distance):欧氏距离(Euclidean distance):曼哈顿距离(Manhattan distance):即当 p=2 时的闵可夫斯基距离即当 p=1 时的闵可夫斯基距离 更新“簇中心”对于划分好的各个簇,计算各个簇中的样本点均值,将其均值作为新的簇中心。K-均值
3、聚类-原理K-均值聚类-原理 K-均值算法缺点 K-均值算法由于初始“簇中心”点是随机选取的,因此最终求得的簇的划分与随机选取的“簇中心”有关,也就是说,可能会造成多种 k 个簇的划分情况。这是因为K-均值算法收敛到了局部最小值,而非全局最小值。K-均值聚类-实战 数据介绍按照每一个实例的相似度聚类成多个簇K-均值聚类-实战 代码结构def loadDataSet(filename): 读取数据集 Args: filename: 文件名 Returns: dataMat: 数据样本矩阵 dataMat = with open(filename, rb) as f: for line in f:
4、 # 读取的字节流需要先解码成utf-8再处理 eles = list(map(float, line.decode(utf-8).strip().split(t) dataMat.append(eles) return dataMatK-均值聚类-实战 代码结构def distEclud(vecA, vecB): 计算两向量的欧氏距离 Args: vecA: 向量A vecB: 向量B Returns: 欧式距离 return np.sqrt(np.sum(np.power(vecA-vecB,2)K-均值聚类-实战 代码结构def randCent(dataSet, k): 随机生成k个聚
5、类中心 Args: dataSet: 数据集 k: 簇数目 Returns: centroids: 聚类中心矩阵 m, _ = dataSet.shape # 随机从数据集中选几个作为初始聚类中心 centroids = dataSet.take(np.random.choice(80,k), axis=0) return centroidsK-均值聚类-实战 代码结构def kMeans(dataSet, k, maxIter=20): K-Means Args: dataSet: 数据集 k: 聚类数 Returns: centroids: 聚类中心 clusterAssment: 点分配
6、结果 # 随机初始化聚类中心 centroids = randCent(dataSet, k) init_centroids = centroids.copy() m, n = dataSet.shape # 点分配结果:第一列指明样本所在的簇,第二列指明 该样本到聚类中心的距离 clusterAssment = np.mat(np.zeros(m, 2) # 标识聚类中心是否仍在变化 clusterChanged = True # 直至聚类中心不再变化 iterCount = 0 while clusterChanged and iterCount maxIter: iterCount +=
7、 1 clusterChanged = False # 分配样本到簇 for i in range(m): # 计算第i个样本到各个聚类中心的距离 minIndex = 0 minDist = np.inf for j in range(k): dist = distEclud(dataSeti, :, centroidsj, :) if dist array ptsInCluster = dataSetnp.nonzero(clusterAssment:, 0.A = cent)0 if ptsInCluster.shape0 0: # 计算均值并移动 centroidscent, : =
8、np.mean(ptsInCluster, axis=0) return centroids, clusterAssment, init_centroidsK-均值聚类-实战 代码结构dataMat = np.mat(loadDataSet(data/testSet.txt)m, n = np.shape(dataMat)set_k = 4centroids, clusterAssment, init_centroids = kMeans(dataMat, set_k)clusterCount = np.shape(centroids)0# 我们这里只设定了最多四个簇的样式,所以前面如果set
9、_k设置超过了4,后面就会出现index errorpatterns = o, D, , scolors = b, g, y, blackfig = plt.figure()title = kmeans with k=.format(set_k)ax = fig.add_subplot(111, title=title)for k in range(clusterCount): # 绘制聚类中心 ax.scatter(centroidsk,0, centroidsk,1, color=r, marker=+, linewidth=20) # 绘制初始聚类中心 ax.scatter(init_c
10、entroidsk,0, init_centroidsk,1, color=purple, marker=*, linewidth=10 ) for i in range(m): # 绘制属于该聚类中心的样本 ptsInCluster = dataMatnp.nonzero(clusterAssment:,0.A=k)0 ax.scatter(ptsInCluster:,0.flatten().A0, ptsInCluster:,1.flatten().A0, color=colorsk, marker=patternsk)plt.show()K-均值聚类-实战 代码结构利用sklearn机器
11、学习库classsklearn.cluster.KMeans(n_clusters=8,init=k-means+,n_init=10,max_iter=300,tol=0.0001,precompute_distances=auto,verbose=0,random_state=None,copy_x=True,n_jobs=None,algorithm=auto) KMeans类的主要参数有: 1) n_clusters: 即我们的k值,一般需要多试一些值以获得较好的聚类效果。 2)max_iter: 最大的迭代次数。 3)n_init:用不同的初始化质心运行算法的次数。由于K-Means
12、是结果受初始值影响的 局部最优的迭代算法,因此需要多跑几次以选择一个较好的聚类效果,默认是10,一般不需要改。如果你的k值较大,则可以适当增大这个值。 4)init: 即初始值选择的方式,可以为完全随机选择random,优化过的k-means+或者自己指定初始化的k个质心。一般建议使用默认的k-means+。 5)algorithm:有“auto”, “full” or “elkan”三种选择。“full”就是我们传统的K-Means算法, “elkan”是elkan K-Means算法。默认的auto则会根据数据值是否是稀疏的,来决定如何选择full和“elkan”。一般数据是稠密的,那么就
13、是 “elkan”,否则就是full”。一般来说建议直接用默认的autoK-均值聚类-实战 代码结构利用sklearn机器学习库fit(self, X)fit_predict(self, X) KMeans类的主要方法:对数据X聚类对数据X聚类且计算每一个样本点对应的类别索引predict(self, X)预测新输入的样本对应的最近的聚类中心X:ndarray数据类型K-均值聚类-实战 代码结构利用sklearn机器学习库import numpy as npimport matplotlib.pyplot as pltfrom sklearn.cluster import KMeansfrom
14、 sklearn.datasets import make_blobsplt.figure(figsize=(12, 12)n_samples = 1500random_state = 200X, y = make_blobs(n_samples=n_samples, random_state=random_state)# Incorrect number of clustersy_pred = KMeans(n_clusters=3, random_state=random_state).fit_predict(X)plt.plot()plt.scatter(X:, 0, X:, 1, c=
15、y_pred)plt.title(kmeans)plt.show()K-均值聚类-实战 代码结构利用sklearn机器学习库K-Means+ 由于 K-means 算法的分类结果会受到初始点的选取而有所区别,因此有提出这种算法的改进: K-means+ ,其实这个算法也只是对初始点的选择有改进而已,其他步骤都一样。初始质心选取的基本思路就是,初始的聚类中心之间的相互距离要尽可能的远。K-Means+ 数据集中共有8个样本,分布以及对应序号如右图所示: 聚类中心选取示例 假设经过步骤一后6号点被选择为第一个初始聚类中心,那在进行步骤二时每个样本的D(x)和被选择为第二个聚类中心的概率如下表所示:
16、K-Means+ 聚类中心选取示例 其中的P(x)就是每个样本被选为下一个聚类中心的概率。最后一行的Sum是概率P(x)的累加和,用于轮盘法选择出第二个聚类中心。方法是随机产生出一个01之间的随机数,判断它属于哪个区间,那么该区间对应的序号就是被选择出来的第二个聚类中心了。 例如1号点的区间为0,0.2),2号点的区间为0.2, 0.525)。 从上表可以直观的看到第二个初始聚类中心是1号,2号,3号,4号中的一个的概率为0.9。而这4个点正好是离第一个初始聚类中心6号点较远的四个点。 这也验证了K-means的改进思想:即离当前已有聚类中心较远的点有更大的概率被选为下一个聚类中心。数据挖掘经
17、典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机PCA-简介 数据降维 在实际生产生活中,我们所获得的数据集在特征上往往具有很高的维度,对高维度的数据进行处理时消耗的时间很大,并且过多的特征变量也会妨碍查找规律的建立。如何在最大程度上保留数据集的信息量的前提下进行数据维度的降低,是我们需要解决的问题。 对数据进行降维有以下优点:(1)使得数据集更易使用 (2)降低很多算法的计算开销 (3)去除噪声 (4)使得结果易懂PCA-简介 数据降维如何降维可以保留尽可能多的信息?PCA-简介数据降维 数据降维的优化目标就是:(1)对于 2 维降到 1
18、 维:找到一个投影方向,使得投影误差和最小。(2)对于 n 维降到 k 维:找到 k 个向量定义的 k 维投影平面,使得投影 误差和最小。 那么投影误差又是什么呢? 投影误差即为,每一个样本点到投影向量或者投影平面的距离。 投影误差和即为所有样本点到投影向量或投影平面的距离的和。PCA-简介数据降维为什么将“投影误差和最小”作为优化目标?投影误差和 假设对于原样本中,位于第一象限的三个样本点属于类别“A”,位于第三象限的两个样本点属于类别“B”。经过投影后,仅左边可保留类别信息。PCA-简介 数据降维如何寻找投影误差最小的方向? 寻找到方差最大的方向即可。方差最大与投影误差最小这两个优化目标其
19、实本质上是一样的。希望投影后的投影值尽可能分散PCA-简介主成分分析(Principal Component Analysis, PCA)是最流行的降维算法,通过把数据从高维映射到低维来降低特征维度,同时保留尽可能多的信息。广泛应用于降维、有损数据压缩、特征提取、数据可视化等领域。是一种无监督的学习方式。 数据降维PCA-简介进行主成分分析有两个目的: 1. 在保留尽可能多的信息的前提下,降低维度。 2. 各样本在新的维度上,没有相关关系(线性)。 也就是不能根据一个维度的值就能大概推测(线性)另一个维度的值。主成分分析第一条原则是新的变量要尽量分散,因为这样代表差异性大,蕴含了更多的信息。第
20、二条原则是新的变量之间线性无关,这样就尽量消除了冗余信息。PCA-简介 PCA算法思路 PCA的算法思路主要是:数据从原来的坐标系转换到新的坐标系,由数据本身决定。转换坐标系时,以方差最大的方向作为坐标轴方向,因为数据的最大方差给出了数据的最重要的信息。第一个新坐标轴选择的是原始数据中方差最大的方向,第二个新坐标轴选择的是与第一个新坐标轴正交且方差次大的方向。重复该过程,重复次数为原始数据的特征维数。PCA-深入分析 数学基础PCA-简介 PCA算法思路 有了前述两条原则以后,那应该具体怎样一步步实现?对于分散程度的度量,我们知道,通常用方差表示。而对于相关性的度量,协方差是一个常见的度量方式
21、。 所以,上述目标转换为: 每个新变量的方差尽量大,新变量之间的协方差为0。PCA-简介 PCA算法思路举个例子,有两个变量的矩阵A为:目标转换为: 协方差矩阵的对角线上元素尽量大,其它元素为0,也就是需要进行对角化。PCA-简介 PCA算法思路协方差矩阵是实对称矩阵,这里需要利用实对称矩阵的一个性质:nxn的实对称矩阵一定可以找到n个单位正交的特征向量,一定可以对角化,特征向量是进行对角化的转移矩阵,特征值组成对角矩阵。因此,问题转化为特征值分解,然后取较大的特征值。 对协方差矩阵进行特征值分解,特征值从大到小排序组成新的协方差矩阵,对应的特征向量(单位正交基)就组成了转移矩阵Q。所以,转换
22、后新的变量C=QA。PCA-简介 PCA算法思路完成变换以后,降维就很容易。新协方差矩阵对角线元素是方差,是包含信息量的度量,而对角线元素从大到小排列,所以只需取前k个变量(列)即可。k具体是多少,可以指定,也可以先计算所有方差的和S,如果前n个方差的和大于了95%*S,那么k就取n。PCA-深入分析 算法过程 缺点分析数据维度降低并不代表特征的减少,因为降维仍旧保留了较大的信息量,对结果过拟合问题并没有帮助。不能将降维算法当做解决过拟合问题方法。如果原始数据特征维度并不是很大,也并不需要进行降维。PCA-实例 要求将二维数据降为1维 解决步骤因为这个矩阵的每行已经是零均值,这里我们直接求协方
23、差矩阵:求解后特征值和特征向量为:PCA-实例 最后我们用P的第一行乘以数据矩阵,就得到了降维后的表示:降维投影结果如右图:标准化后的特征向量为:因此我们的矩阵P是:PCA-实战sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)n_components: int, float, None 或 string,PCA算法中所要保留的主成分个数,也即保留下来的特征个数,如果 n_components = 1,将把原始数据降到一维;如果赋值为string,如n_components=mle,将自动选取特征个数,使得
24、满足所要求的方差百分比;如果没有赋值,默认为None,特征个数不会改变(特征数据本身会改变)。copy:True 或False,默认为True,即是否需要将原始训练数据复制。whiten:True 或False,默认为False,即是否白化,使得每个特征具有相同的方差。PCA-实战 PCA对象的属性explained_variance_ratio_:返回所保留各个特征的方差百分比,如果n_components没有赋值,则所有特征都会返回一个数值且解释方差之和等于1。n_components_:返回所保留的特征个数。PCA-实战 PCA常用方法fit(X): 用数据X来训练PCA模型。fit_t
25、ransform(X):用X来训练PCA模型,同时返回降维后的数据。transform(X):将数据X转换成降维后的数据,当模型训练好后,对于新输入的数据,也可以用transform方法来降维。PCA-实战import numpy as npimport matplotlib.pyplot as pltfrom sklearn.decomposition import PCAX = np.array(-1, -1, -2, -1, -3, -2, 1, 1, 2, 1, 3, 2)#pca = PCA(n_components=2)#newX = pca.fit_transform(X)pri
26、nt(X)#print(newX)#print(pca.explained_variance_ratio_)pca = PCA(n_components=1)newX = pca.fit_transform(X)print(newX)#print(pca.explained_variance_ratio_)plt.scatter(X:, 0, X:, 1,marker=o)plt.scatter(newX:, 0, newX:, 0*0,color=r)plt.show()数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机K-近邻算
27、法-简介 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类。 定义绿色点属于什么类别?当 k=3 时,结果见第一个圆环内,此时红色实例点为2个,蓝色实例点为1个,因此将未知点判定为红色类别。当 k=5 时,结果见第二个圆环内,此时红色实例点为2个,蓝色实例点为3个,因此将未知点判定为蓝色类别。K-近邻算法-分析 给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的 k 个实例,这 k 个实例的多数属于某个类,就把该输入实例分为这个类。 定义回顾K-近邻算法的三大要素距离的度量:一般使用
28、欧氏距离K值的选择:结果对k值敏感,一般通过交叉验证选择分类决策规则:投票法K-近邻算法-步骤输入:输出:输入训练数据K-近邻算法-优缺点分析 训练样本是否要一视同仁?在训练集中,有些样本可能是更值得依赖的。可以给不同的样本施加不同的权重,加强依赖样本的权重,降低不可信赖样本的影响。weight = 1 / (distance + const) 性能问题?KD树Ball树暴力匹配K-近邻算法-优缺点分析 优点 缺点精度高对异常值不敏感无数据输入假定计算复杂度高空间复杂度高样本不平衡时分类错误几率较高K-近邻算法-实战class sklearn.neighbors.NearestNeighbor
29、s(n_neighbors=5, algorithm=auto, leaf_size=30, metric=minkowski, p=2, metric_params=None, n_jobs=None, *kwargs) K近邻算法n_neighbors : int, optional (default = 5) 邻居的个数algorithm : auto, ball_tree, kd_tree, brute, optional ball_tree BallTree kd_tree KDTree brute 暴力搜索. auto 根据数据自动选择leaf_size:使用BallTree 或
30、KDTree时需指定,影响计算速度,具体问题具体对待metric: 距离度量类型,cityblock, cosine, euclidean, l1, l2, manhattanP:闵式距离时的范数metric_params:自定义距离度量函数K-近邻算法-实战 K近邻算法fit(X) 学习KNN模型kneighbors(X) 寻找最近的K个点常用成员方法K-近邻算法-实战 K近邻算法from sklearn.neighbors import NearestNeighborsimport numpy as np # 快速操作结构数组的工具X = np.array(-1, -1, -2, -1,
31、-3, -2, 1, 1, 2, 1, 3, 2) # 样本数据test_x = np.array(-3.2, -2.1, -2.6, -1.3, 1.4, 1.0, 3.1, 2.6, 2.5, 1.0, -1.2, -1.3) # 设置测试数据# test_x=X # 测试数据等于样本数据。这样就相当于在样本数据内部查找每个样本的邻节点了。nbrs = NearestNeighbors(n_neighbors=2, algorithm=ball_tree).fit(X) # 为X生成knn模型distances, indices = nbrs.kneighbors(test_x) # 为t
32、est_x中的数据寻找模型中的邻节点print(邻节点:,indices)print(邻节点距离:,distances)K-近邻算法-实战 K近邻分类class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights=uniform, algorithm=auto, leaf_size=30, p=2, metric=minkowski, metric_params=None, n_jobs=None)weights : 样本权重uniform : 所有样本均匀(同权重)distance : 样本权重等于距离的倒数K-近邻算法
33、-实战 K近邻分类常用成员方法fit(X, y) 训练模型kneighbors(X) 返回最近邻点predict(X) 预测新的数据的类别K-近邻算法-实战 K近邻分类import numpy as np # 快速操作结构数组的工具from sklearn.neighbors import KNeighborsClassifier,KDTree # 导入knn分类器# 数据集。4种属性,3种类别data= 5.1, 3.5, 1.4, 0.2, 0, 4.9, 3.0, 1.4, 0.2, 0, 4.7, 3.2, 1.3, 0.2, 0, 4.6, 3.1, 1.5, 0.2, 0, 5.0
34、, 3.6, 1.4, 0.2, 0, 7.0, 3.2, 4.7, 1.4, 1, 6.4, 3.2, 4.5, 1.5, 1, 6.9, 3.1, 4.9, 1.5, 1, 5.5, 2.3, 4.0, 1.3, 1, 6.5, 2.8, 4.6, 1.5, 1, 6.3, 3.3, 6.0, 2.5, 2, 5.8, 2.7, 5.1, 1.9, 2, 7.1, 3.0, 5.9, 2.1, 2, 6.3, 2.9, 5.6, 1.8, 2, 6.5, 3.0, 5.8, 2.2, 2,# 构造数据集dataMat = np.array(data)X = dataMat:,0:4y =
35、dataMat:,4knn = KNeighborsClassifier(n_neighbors=2,weights=distance) # 初始化一个knn模型,设置k=2。weights=distance样本权重等于距离的倒数。uniform为统一权重knn.fit(X, y) #根据样本集、结果集,对knn进行建模result = knn.predict(3, 2, 2, 5) #使用knn对新对象进行预测print(result)数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机朴素贝叶斯分类-简介某个医院早上收了六个门诊病
36、人,如下表:症状职业疾病打喷嚏护士感冒打喷嚏农夫过敏 头痛建筑工人脑震荡头痛建筑工人感冒打喷嚏教师感冒头痛教师脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?朴素贝叶斯分类-简介贝叶斯定理条件概率和全概率 上面的推导过程反过来证明了如果 A 和 B 是相互独立的事件,那么事件 A 发生的概率与 B 无关。朴素贝叶斯分类-简介贝叶斯定理条件概率和全概率考虑到先验条件 B 的多种可能性,引入全概率公式: 对前式移项:朴素贝叶斯分类-简介贝叶斯定理贝叶斯公式优点:搭建了先验概率与后验概率的桥梁朴素贝叶斯分类-原理某个医院早上收了六个门诊病人,如下表:症状职业疾病打喷
37、嚏护士感冒打喷嚏农夫过敏 头痛建筑工人脑震荡头痛建筑工人感冒打喷嚏教师感冒头痛教师脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?事件A:打喷嚏事件B:建筑工人事件C:感冒事件A与事件B是独立的朴素贝叶斯分类-原理某个医院早上收了六个门诊病人,如下表:症状职业疾病打喷嚏护士感冒打喷嚏农夫过敏 头痛建筑工人脑震荡头痛建筑工人感冒打喷嚏教师感冒头痛教师脑震荡 现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?事件A:打喷嚏事件B:建筑工人事件C:感冒观测历史数据越多,准确率越高朴素贝叶斯分类-实战性别分类下面是一组人类身体特征的统计资料。性
38、别身高(英尺) 体重(磅) 脚掌(英寸)男 6 180 12男 5.92 190 11男 5.58 170 12男 5.92 165 10女 5 100 6女 5.5 150 8女 5.42 130 7女 5.75 150.9 9已知某人身高6英尺、体重130磅,脚掌8英寸,请问该人是男是女?根据朴素贝叶斯分类器,计算下面这个式子的值。P(身高|性别) x P(体重|性别) x P(脚掌|性别) x P(性别)朴素贝叶斯分类-实战性别分类下面是一组人类身体特征的统计资料。性别身高(英尺) 体重(磅) 脚掌(英寸)男 6 180 12男 5.92 190 11男 5.58 170 12男 5.9
39、2 165 10女 5 100 6女 5.5 150 8女 5.42 130 7女 5.75 150.9 9P(身高=6|男) x P(体重=130|男) x P(脚掌=8|男) x P(男) P(身高=6|女) x P(体重=130|女) x P(脚掌=8|女) x P(女)朴素贝叶斯分类-实战难点连续数据如何处理数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机逻辑回归-简介 逻辑回归(Logistic Regression)主要用于二分类、概率预测问题,使用sigmoid函数可以将输出的值限制在区间0,1上,然后我们可以选择一
40、个阈值,通常是0.5,当y0.5时,就将样本归到一类,如果y0.5就将样本归到另一类。逻辑回归一般用于0/1分类0: “负类” 1: “正类”malignant 逻辑回归-简介Malignant ?(Yes) 1(No) 0Tumor Size逻辑回归-简介Tumor SizeMalignant ?(Yes) 1(No) 0逻辑回归-简介Tumor SizeMalignant ?(Yes) 1(No) 0If , 预测 “y = 1”If , 预测 “y = 0”逻辑回归-简介逻辑回归的目的: 找到一种方式使得 Sigmoid函数逻辑回归-公式化表示决策边界(Decision Boundary
41、)逻辑回归-公式化表示决策边界(Decision Boundary)例子回顾逻辑回归-深入分析线性决策边界模型表达式决策边界表达式逻辑回归-深入分析非线性决策边界模型表达式逻辑回归-深入分析逻辑回归的一般化表示逻辑回归-深入分析损失函数两边取log期望最大优化最小逻辑回归-深入分析损失函数直接使用线性回归的损失函数会造成非凸优化难题逻辑回归-深入分析多分类问题逻辑回归-深入分析多分类问题数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机决策树-简介决策树以树结构的形式建立分类或回归模型。决策树可以通过从树根节点开始到叶节点的路径决策
42、来预测目标变量的值。决策树包括分支条件,其中预测器的值与训练的权重进行比较。在训练过程中确定分支的数量和权重的值。决策树容易过拟合,可以使用附加修改或修剪可以用于简化模型。决策树-分析构建决策树的三要素 以上是由决策树来进行分类的过程。而决策树的学习(构建)通常是一个递归地选择最优特征的过程。那么构建决策树时如何选择特征作为划分点(即选择哪个特征作为根节点或者选择哪个特征作为非叶子节点)?当训练数据量大、特征数量较多时构建的决策树可能很庞大,这样的决策树用来分类是否好?特征选择决策树的生成决策树修剪决策树-分析特征选择 基于ID3算法的决策树构建,其选择特征的准则是信息增益。信息增益(info
43、rmation gain)表示得知特征 X 的信息而使得类 Y 的信息的不确定性减少的程度。也就是说,信息增益越大,通过特征 X ,就越能够准确地将样本进行分类;信息增益越小,越无法准确进行分类。决策树-分析特征选择熵 熵是度量样本集合纯度最常用的一种指标,它是信息的期望值。如果待分类的事务可能划分在多个分类之中,则符号(特征)k 的信息定义为:而熵计算的是所有类别所有可能值包含的信息期望值,其公式为:决策树-分析特征选择熵(1)对于最终分类(是否为好瓜),计算其信息熵: 由上表可看出,一共有17个样本,属于好瓜的有8个样本,坏瓜的有9个样本,因此其熵为:决策树-分析特征选择熵决策树-分析特征
44、选择熵决策树-分析特征选择信息增益决策树-分析特征选择信息增益决策树-步骤 ID3算法递归地构建决策树,从根节点开始,对所有特征计算信息增益,选择信息增益最大的特征作为节点的特征,由该特征的不同取值建立子节点;再对子节点递归地调用以上方法构建决策树;知道所有特征的信息增益均很小或者没有特征可以选择为止。最后得到一个决策树。在算法中有三种情形导致递归返回:(1)当前节点包含的样本全属于同一类别,无需划分。(2)当前属性集为空,或是所有样本在所有属性上取值相同,无法划分。(此时将所含样本最多的类别设置为该叶子节点类别)(3)当前节点包含的样本集合为空,不能划分。(将其父节点中样本最多的类别设置为该
45、叶子节点的类别)决策树-步骤剪枝处理 当训练数据量大、特征数量较多时构建的决策树可能很庞大,这样的决策树用来分类是否好?答案是否定的。决策树是依据训练集进行构建的,当决策树过于庞大时,可能对训练集依赖过多,也就是对训练数据过度拟合。从训练数据集上看,拟合效果很好,但对于测试数据集或者新的实例来说,并不一定能够准确预测出其结果。因此,对于决策树的构建还需要最后一步-即决策树的修剪。决策树的修剪,也就是剪枝操作,主要分为两种:(1)预剪枝(Pre-Pruning)(2)后剪枝(Post-Pruning)决策树-步骤剪枝处理(1)预剪枝(Pre-Pruning) 预剪枝是指在决策树生成过程中,对每个
46、节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。决策树-步骤剪枝处理(1)预剪枝(Pre-Pruning) 预剪枝是指在决策树生成过程中,对每个节点在划分前先进行估计,若当前节点的划分不能带来决策树泛化性能的提升,则停止划分并将当前节点标记为叶节点。决策树-步骤剪枝处理(1)后剪枝(Post-Pruning) 后剪枝是指先从训练集生成一棵完整的决策树,然后自底向上地对非叶节点进行考察,若将该节点对应的子树替换为叶节点能带来决策能力的提升,则将该子树替换成叶节点。决策树-实战数据介绍共分为四个属性特征:年龄段,有工作,有自己的房子,信贷情
47、况;现根据这四种属性特征来决定是否给予贷款决策树-实战数据介绍预处理在编写代码之前,我们先对数据集进行属性标注。(0)年龄:0代表青年,1代表中年,2代表老年;(1)有工作:0代表否,1代表是;(2)有自己的房子:0代表否,1代表是;(3)信贷情况:0代表一般,1代表好,2代表非常好;(4)类别(是否给贷款):no代表否,yes代表是。决策树-实战数据介绍核心代码模块(计算信息熵)def jisuanEnt(dataset): numEntries = len(dataset) labelCounts = # 给所有可能分类创建字典 for featVec in dataset: curren
48、tlabel = featVec-1 if currentlabel not in labelCounts.keys(): labelCountscurrentlabel = 0 labelCountscurrentlabel += 1 Ent = 0.0 for key in labelCounts: p = float(labelCountskey) / numEntries Ent = Ent - p * log(p, 2) # 以2为底求对数 return Ent决策树-实战数据介绍构建树结果示例决策树-实战class sklearn.tree.DecisionTreeClassifi
49、er(criterion=gini, splitter=best, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)criterion:gini或者entropy,前者是基尼系数,后者是
50、信息熵。splitter: best or random 前者是在所有特征中找最好的切分点 后者是在部分特征中,默认的”best”适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐”random” 。max_features:None(所有),log2,sqrt,N 特征小于50的时候一般使用所有的max_depth: int or None, optional (default=None) 设置决策随机森林中的决策树的最大深度,深度越大,越容易过拟合,推荐树的深度为:5-20之间。min_samples_split:设置结点的最小样本数量,当样本数量可能小于此值时,结点将不会在
51、划分。min_samples_leaf: 这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。决策树-实战class sklearn.tree.DecisionTreeClassifier(criterion=gini, splitter=best, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impur
52、ity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)min_weight_fraction_leaf: 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝默认是0,就是不考虑权重问题。max_leaf_nodes: 通过限制最大叶子节点数,可以防止过拟合,默认是None”,即不限制最大的叶子节点数。class_weight: 指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。这里可以自己指定各个样本的权重,如果使用“
53、balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。min_impurity_split: 这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小于这个阈值则该节点不再生成子节点。即为叶子节点 。决策树-实战fit(self, X, y): 拟合(构建树)predict(self, X): 预测score(self, X):计算平均准确率cancer = load_breast_cancer()#参数random_state是指随机生成器X_train,X_test,y_train,y_test = train_test_split(ca
54、ncerdata,cancertarget,random_state=42)tree = DecisionTreeClassifier(random_state=0)#tree = DecisionTreeClassifier(max_depth=4,random_state=0)tree.fit(X_train,y_train)print(Train score:.3f.format(tree.score(X_train,y_train)print(Test score:.3f.format(tree.score(X_test,y_test)#生成可视化图export_graphviz(tr
55、ee,out_file=tree.dot,class_names=严重,轻微,feature_names=cancer.feature_names,impurity=False,filled=True)# 展示可视化图 import pydot(graph,) = pydot.graph_from_dot_file(tree.dot) graph.write_png(tree.png)数据挖掘经典算法逻辑回归1PCA降维2 K-近邻算法3朴素贝叶斯分类4K均值聚类56决策树7EM算法8支持向量机EM算法-简介Expectation Maximization AlgorithmEM算法是ML中一
56、种非常重要的参数估计方法似然函数 在数理统计学中,似然函数是一种关于统计模型中的参数的函数,表示模型参数中的似然性。“似然性”与“或然性”或“概率”意思相近,都是指某种事件发生的可能性。 而极大似然就相当于最大可能的意思。EM算法-简介Expectation Maximization AlgorithmEM算法是ML中一种非常重要的参数估计方法似然函数例子: 比如你一位同学和一位猎人一起外出打猎,一只野兔从前方窜过。只听一声枪响,野兔应声到下,如果要你推测,这一发命中的子弹是谁打的?你就会想,只发一枪便打中,由于猎人命中的概率一般大于你那位同学命中的概率,从而推断出这一枪应该是猎人射中的。 这
57、个例子所作的推断就体现了最大似然法的基本思想。-例子来源于结构之法,算法之道EM算法-简介似然函数 多数情况下我们是根据已知条件来推算结果,而最大似然估计是已经知道了结果,然后寻求使该结果出现的可能性最大的条件,以此作为估计值。 概率是根据条件推测结果,而似然则是根据结果反推条件。在这种意义上,似然函数可以理解为条件概率的逆反。假定已知某个参数B时,推测事件A会发生的概率写作:通过贝叶斯公式,可以得出EM算法-简介似然函数EM算法-简介极大似然估计假定我们需要统计10万学生中男生女生的身高分布,怎么统计?考虑到10万的数量巨大,所以不可能一个一个的去统计。实际解决方案:随机抽样,从10万学员中
58、随机抽取100个男生,100个女生,然后依次统计他们各自的身高。 EM算法-简介极大似然估计EM算法-简介极大似然估计解决思路:怎样的能让L()最大?EM算法-简介极大似然估计求极大似然函数估计值的一般步骤:EM算法-简介极大似然估计求极大似然函数估计值的一般步骤:写出似然函数;对似然函数取对数,并整理;求导数,令导数为0,得到似然方程;解似然方程,得到的参数即为所求;EM算法-简介极大似然估计EM算法-简介极大似然估计假设我们的试验结果如上图, 那么我们很容易用极大似然估计来预测:EM算法-简介极大似然估计EM算法-步骤EM算法-步骤先随便给PA和PB赋一个值,比如:硬币A正面朝上的概率PA
59、 = 0.2硬币B正面朝上的概率PB = 0.7然后,我们看看第一轮抛掷最可能是哪个硬币。如果是硬币A,得出3正2反的概率为 0.2*0.2*0.2*0.8*0.8 = 0.00512如果是硬币B,得出3正2反的概率为0.7*0.7*0.7*0.3*0.3=0.03087然后依次求出其他4轮中的相应概率。EM算法-步骤按照最大似然法则:第1轮中最有可能的是硬币B ; 第2轮中最有可能的是硬币A;第3轮中最有可能的是硬币A ; 第4轮中最有可能的是硬币B; 第5轮中最有可能的是硬币A。我们就把概率更大,即更可能是A的,即第2轮、第3轮、第5轮出现正的次数2、1、2相加,除以A被抛的总次数15(A
60、抛了三轮,每轮5次),作为z的估计值,B的计算方法类似。然后我们便可以按照最大似然概率法则来估计新的PA和PB。PA = (2+1+2)/15 = 0.33 PB =(3+3)/10 = 0.6EM算法-步骤 最大期望算法(Expectation-maximization algorithm,又译为期望最大化算法),是在概率模型中寻找参数最大似然估计或者最大后验估计的算法,其中概率模型依赖于无法观测的隐性变量。最大期望算法经过两个步骤交替进行计算, 第一步是计算期望(E),利用对隐藏变量的现有估计值,计算其最大似然估计值; 第二步是最大化(M),最大化在E步上求得的最大似然值来计算参数的值。M
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高等数学之导数与微分:课件精讲
- 《零售促销策略》课件
- 陕西高考英语高频词汇单选题100道及答案
- 《建筑智能化系统集成》课件
- 《试井解释原理》课件
- 西樵镇第一次模拟考试物理试卷
- 文档面试技巧
- 煤炭平仓付款合同范本
- 《细胞结构和功能》课件
- 《现代农业技术与装备》课件
- 2025天津东疆综合保税区管理委员会招聘10人笔试参考题库附带答案详解
- 法院书记员招聘2023年笔试考试必做题有答案
- 2024年北京大兴国际机场临空经济区幼儿园招聘教师考试真题
- 雅礼新苗杯试题及答案
- 2025神农科技集团有限公司第一批校园招聘17人(山西)笔试参考题库附带答案详解
- 医院地震安全培训
- 2025-2030中国低压电器行业市场发展趋势与前景展望战略研究报告
- 2025上海海事大学辅导员考试题库
- 食堂7s管理标准
- 中国现代文学思潮知到课后答案智慧树章节测试答案2025年春杭州师范大学
- 学生社区实习评语
评论
0/150
提交评论