Python机器学习10大经典算法的讲解和示例
我打算为每一个经典的机器学习算法分别编写一个非常简单的示例代码块, 好让大家能够直观地看到具体的应用方式。我所选取的这些算法总共有一零种。这其中包括线性回归模型和逻辑回归模型, 同时也有基于实例的KNN即K-最近邻分类方法, 还有大名鼎鼎的支持向量机也就是所谓的SVM工具, 以及常用的决策树预测算法, 另外还有集成学习中的随机森林技术、假设独立的朴素贝叶斯定理, 在处理数据降维时会用到的主成分分析简称PCA手段, 最后还会介绍利用梯度提升机制进行的计算过程。我将使用常见的机器学习库如 -learnnumpy 和 来实现这些算法。咱们还是先把这个事儿动手开干比较好。1. 线性回归 ( )线性回归, 这种做法通常被用来凭借连续性的变量去估计那些实际的数值情况, 比如说房价、呼叫次数、总销售额, 诸如此类的事物。我们是通过拟合一条最佳直线的方式, 来建立起自变量还有因变量之间的联系。这一条所谓最佳的直线, 它是被称为回归线的, 并且使用Y a *X b 这样的一条线性等式来进行表示。理解线性回归的最好办法, 是让我们回顾一下童年。假设我们不问对方的体重, 而是让一个五年级的孩子, 按体重从轻到重的顺序, 对班上的同学进行排序。你觉得这个孩子会怎么做呢?他她很可能会目测人们的身高和体型。然后, 综合这些可见的参数, 来排列他们。这是现实生活中使用线性回归的例子。其实, 这个小孩儿注意到了身高和体型跟体重之间有着一定的关联, 这关联看着特别像前面那个算式。import numpy as npfrom sklearn.linear_model import LinearRegressionimport matplotlib.pyplot as plt# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([1, 2, 3, 4, 5])# 创建线性回归模型并拟合数据model LinearRegression()model.fit(X, y)# 预测y_pred model.predict(X)# 绘制结果plt.scatter(X, y, colorblue)plt.plot(X, y_pred, colorred)plt.title(Linear Regression Example)plt.xlabel(X)plt.ylabel(y)plt.show()2. 逻辑回归 ( )千万不要被它的那个名字给骗了, 这可不是一个回归算法, 它明明就是一个分类算法。这个算法能够依据已知的一堆因变量, 去估计那种离散的数值, 比如说二进制的数值 0 或者是 1, 也就是是或者否, 真还是假这样的东西。要是把话讲得再直白一点的话, 它就是通过把数据拟合到一个逻辑函数里面去, 从而预估出一个事件会出现的概率的。正因为如此, 所以人们也把它叫作逻辑回归。因为它是基于概率来进行一个预估行为的, 所以它的输出值的大小的范围是处于0和1之间的这个状态的, 这一点其实和我们最初的预期所表现出来的情况是完全一致的。import numpy as npfrom sklearn.linear_model import LogisticRegression# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建逻辑回归模型并拟合数据model LogisticRegression()model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)3. K-最近邻 (K- , KNN)这个算法既可以用来解决分类方面所存在的问题, 也同样可以用于处理回归方面所存在的问题。可是呢, 在当前的这个商业应用业界里面, K 减号 最近邻算法还是更加频繁地被运用到了分类问题的处理中去去的。要知道, K 减号 最近邻算法本身其实是一个非常简单的基础性计算步骤流程模型体系。在具体运作起来的时候, 它会先一步把所有的这些相关训练案例数据全部都给储存下来。随后再去通过观察和分析周围的那些紧邻在一起的 k 个案例的具体情况来如何对一个新的、尚未确定的未知分类案例进行划分和归类操作。也就是去根据某一个预先设定好的距离计算函数标准, 让这个新来的案例最终被分配并且合并到由其 K 个最近邻居所组成的群体当中去占据占比最大的那个最普遍的类别里面去结束任务。这些距离函数, 它们可以是欧式距离, 也可以是曼哈顿距离, 或者是明氏距离, 再或者, 就是汉明距离。前头这三个距离函数, 它们是打算用在连续变量那里的, 而第四个距离函数, 也就是汉明距离, 它则是被用于处理分类变量的情形了。倘若 K 等于 1, 那么这个新的案例, 就会直接被划分到那个离得它最近的案例所属于的那个类别里面去的。偶尔, 当大家使用 KNN 进行建模工作的时候, 去选取 K 这个数值到底取多少这个问题, 是会成为一个让人发愁的挑战的。import numpy as npfrom sklearn.neighbors import KNeighborsClassifier# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建KNN模型并拟合数据model KNeighborsClassifier(n_neighbors3)model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)4. 支持向量机 ( , SVM)这种算法是一种分类方法, 在该算法之中, 我们每一个数据都在N维空间之中利用点进行标志其中N就是你的所有特征的总数, 而每个特征的值则是作为一个坐标的值。import numpy as npfrom sklearn.svm import SVC# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建SVM模型并拟合数据model SVC()model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)5. 决策树 ( Tree)这就是我最为偏爱, 并且使用频率也最高的一项算法。这类属于监督式学习范畴的算法, 一般被部署在用来解决分类问题的场景之内。让人感到相当诧异的一点是, 它同时也能够处理分类变量以及那些连续的因变量类型。在此项算法的执行逻辑里, 我们的主要操作会把整体数据划分到两个或者更多彼此相同的群组中去的。这种划分行为的依据核心的是基于最关键的那些特性属性抑或是自变量来实现的, 其目标就是让这些分出来的组别之间达到尽可能大的差异度状态。import numpy as npfrom sklearn.tree import DecisionTreeClassifier# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建决策树模型并拟合数据model DecisionTreeClassifier()model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)6. 随机森林 ( )随机森林作为一个专有名词, 指的是由多棵决策树组成的集合。在运行这个算法的时候, 大家会用到好多个决策树, 正因为数量多, 所以才得了个“森林”这样的别名。当我们想要拿一个全新对象的特征数据去做分类操作的时候, 每一棵单独的决策树都会给出自己的判断结果, 这种行为通常被描述为那棵决策树对相应的分类投出了一票。最后, 整个森林系统会把所有树木投出的票数统计一遍从其中选出得票总数最高的那个分类, 并以此作为最终的输出结果。import numpy as npfrom sklearn.ensemble import RandomForestClassifier# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建随机森林模型并拟合数据model RandomForestClassifier(n_estimators10)model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)7. 朴素贝叶斯 (Naive Bayes)在假设各个指标变量之间互相没有联系的情况下, 我们能够依据贝叶斯定理, 推出那种叫作朴素贝叶斯的分类办法。换个更直白说法来讲就是, 一个朴素贝叶斯分类器心里头认定, 某个类的某种特点, 跟这个类里头其他的任何特点都没啥牵连。打个比方来说吧, 碰到一种水果, 它长得挺圆乎, 颜色是红彤彤的, 而且直径差不多就有 3 英寸那么大, 这时候我们就能猜测, 这水果很有可能是个苹果。虽然这些特性之间可能存在相互依赖的关系, 或者它们依赖于其他特性的存在, 朴素贝叶斯分类器依然会假设每一个特性都独立地对“这个水果是一个苹果”这一结论提供暗示。该朴素贝叶斯模型非常便于搭建, 并且在面对大型数据集的时候能够发挥很大的作用, 虽然它的结构相对简单, 然而在实际表现方面, 它却能够胜过一些极为复杂的分类方法。import numpy as npfrom sklearn.naive_bayes import GaussianNB# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建朴素贝叶斯模型并拟合数据model GaussianNB()model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)8. K-均值聚类 (K-Means )K– 均值算法是一种非监督式学习算法, 它能解决聚类问题。使用 K – 均值算法来将一个数据归入一定数量的集群的过程, 假设这里有 k 个集群, 这个过程是简单的。一个集群里面的数据点是均匀齐次的, 并且异于别的集群。import numpy as npfrom sklearn.cluster import KMeansimport matplotlib.pyplot as plt# 生成示例数据X np.array([[1], [2], [3], [4], [5]])# 创建K-Means模型并拟合数据model KMeans(n_clusters2)model.fit(X)# 预测y_pred model.predict(X)# 绘制结果plt.scatter(X, np.zeros_like(X), cy_pred, cmapviridis)plt.title(K-Means Clustering Example)plt.xlabel(X)plt.show()9. 主成分分析 ( , PCA)主成分分析, 英文简称为主成分分析, 也就是PCA, 这是一种大家用得比较多的把数据维度降低的一些手段, 它的目的, 就是要把原本可能互相有关联的那么一堆变量, 给转换成一堆彼此之间没有任何线性关系的其他变量, 这些东西在咱们这里就被称呼作主成分, 同时, 还得尽量去保证原来得那些数据集里面的信息被尽可能多地带走别丢。import numpy as npfrom sklearn.decomposition import PCAimport matplotlib.pyplot as plt# 生成示例数据X np.array([[1, 2], [3, 4], [5, 6], [7, 8]])# 创建PCA模型并拟合数据pca PCA(n_components2)X_r pca.fit_transform(X)# 绘制结果plt.scatter(X_r[:, 0], X_r[:, 1])plt.title(PCA Example)plt.xlabel(Principal Component 1)plt.ylabel(Principal Component 2)plt.show()10. 梯度提升 ( )梯度提升模型, 这是一种集成学习的方法, 它是通过不停地训练好几个弱的学习器, 这里头通常是用的是决策树, 然后再把这些弱学习器凑到一起, 变成一个强力的学习器。这个梯度提升的模型, 它还能通过分析特征的重要程度, 来帮我们搞清楚在数据里头, 每一个特征是有多重要, 也就是看看各个特征的相对地位是咋样的。import numpy as npfrom sklearn.ensemble import GradientBoostingClassifier# 生成示例数据X np.array([[1], [2], [3], [4], [5]])y np.array([0, 0, 0, 1, 1])# 创建梯度提升模型并拟合数据model GradientBoostingClassifier(n_estimators10)model.fit(X, y)# 预测y_pred model.predict(X)print(Predictions:, y_pred)总结到此为止, 这篇关于机器学习的10大经典算法的讲解和示例文章已经介绍到这一阶段了。如果想要获取更多与机器的学习和的10大经典算法相关的內容, 请你去搜索脚本之家以前的文章或者继续浏览下面的这些相关文章。希望大家都能够在以后多多支持脚本之家这个平台