为了展示10个经典的机器学习算法的最简例子,我将为每个算法编写一个小的示例代码。这些算法将包括线性回归、逻辑回归、K-最近邻(KNN)、支持向量机(SVM)、决策树、随机森林、朴素贝叶斯、K-均值聚类、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我将使用常见的机器学习库,如 scikit-learn,numpy 和 pandas 来实现这些算法。
让我们开始吧。
1. 线性回归 (Linear Regression)
线性回归通常用于根据连续变量估计实际数值(房价、呼叫次数、总销售额等)。我们通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y= a *X + b 这条线性等式来表示。
理解线性回归的最好办法是回顾一下童年。假设在不问对方体重的情况下,让一个五年级的孩子按体重从轻到重的顺序对班上的同学排序,你觉得这个孩子会怎么做?他(她)很可能会目测人们的身高和体型,综合这些可见的参数来排列他们。这是现实生活中使用线性回归的例子。实际上,这个孩子发现了身高和体型与体重有一定的关系,这个关系看起来很像上面的等式。
import numpy as np from sklearn.linear_model import LinearRegression import 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, color='blue') plt.plot(X, y_pred, color='red') plt.title("Linear Regression Example") plt.xlabel("X") plt.ylabel("y") plt.show()
2. 逻辑回归 (Logistic Regression)
别被它的名字迷惑了!这是一个分类算法而不是一个回归算法。该算法可根据已知的一系列因变量估计离散数值(比方说二进制数值 0 或 1 ,是或否,真或假)。简单来说,它通过将数据拟合进一个逻辑函数来预估一个事件出现的概率。因此,它也被叫做逻辑回归。因为它预估的是概率,所以它的输出值大小在 0 和 1 之间(正如所预计的一样)。
import numpy as np from 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-Nearest Neighbors, KNN)
该算法可用于分类问题和回归问题。然而,在业界内,K – 最近邻算法更常用于分类问题。K – 最近邻算法是一个简单的算法。它储存所有的案例,通过周围k个案例中的大多数情况划分新的案例。根据一个距离函数,新案例会被分配到它的 K 个近邻中最普遍的类别中去。
这些距离函数可以是欧式距离、曼哈顿距离、明式距离或者是汉明距离。前三个距离函数用于连续函数,第四个函数(汉明函数)则被用于分类变量。如果 K=1,新案例就直接被分到离其最近的案例所属的类别中。有时候,使用 KNN 建模时,选择 K 的取值是一个挑战。
import numpy as np from sklearn.neighbors import KNeighborsClassifier # 生成示例数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([0, 0, 0, 1, 1]) # 创建KNN模型并拟合数据 model = KNeighborsClassifier(n_neighbors=3) model.fit(X, y) # 预测 y_pred = model.predict(X) print("Predictions:", y_pred)
4. 支持向量机 (Support Vector Machine, SVM)
这是一种分类方法。在这个算法中,我们将每个数据在N维空间中用点标出(N是你所有的特征总数),每个特征的值是一个坐标的值。
import numpy as np from 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. 决策树 (Decision Tree)
这是我最喜爱也是最频繁使用的算法之一。这个监督式学习算法通常被用于分类问题。令人惊奇的是,它同时适用于分类变量和连续因变量。在这个算法中,我们将总体分成两个或更多的同类群。这是根据最重要的属性或者自变量来分成尽可能不同的组别。
import numpy as np from 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. 随机森林 (Random Forest)
随机森林是表示决策树总体的一个专有名词。在随机森林算法中,我们有一系列的决策树(因此又名“森林”)。为了根据一个新对象的属性将其分类,每一个决策树有一个分类,称之为这个决策树“投票”给该分类。这个森林选择获得森林里(在所有树中)获得票数最多的分类。
import numpy as np from sklearn.ensemble import RandomForestClassifier # 生成示例数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([0, 0, 0, 1, 1]) # 创建随机森林模型并拟合数据 model = RandomForestClassifier(n_estimators=10) model.fit(X, y) # 预测 y_pred = model.predict(X) print("Predictions:", y_pred)
7. 朴素贝叶斯 (Naive Bayes)
在预示变量间相互独立的前提下,根据贝叶斯定理可以得到朴素贝叶斯这个分类方法。用更简单的话来说,一个朴素贝叶斯分类器假设一个分类的特性与该分类的其它特性不相关。举个例子,如果一个水果又圆又红,并且直径大约是 3 英寸,那么这个水果可能会是苹果。即便这些特性互相依赖,或者依赖于别的特性的存在,朴素贝叶斯分类器还是会假设这些特性分别独立地暗示这个水果是个苹果。
朴素贝叶斯模型易于建造,且对于大型数据集非常有用。虽然简单,但是朴素贝叶斯的表现却超越了非常复杂的分类方法。
import numpy as np from 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 Clustering)
K – 均值算法是一种非监督式学习算法,它能解决聚类问题。使用 K – 均值算法来将一个数据归入一定数量的集群(假设有 k 个集群)的过程是简单的。一个集群内的数据点是均匀齐次的,并且异于别的集群。
import numpy as np from sklearn.cluster import KMeans import matplotlib.pyplot as plt # 生成示例数据 X = np.array([[1], [2], [3], [4], [5]]) # 创建K-Means模型并拟合数据 model = KMeans(n_clusters=2) model.fit(X) # 预测 y_pred = model.predict(X) # 绘制结果 plt.scatter(X, np.zeros_like(X), c=y_pred, cmap='viridis') plt.title("K-Means Clustering Example") plt.xlabel("X") plt.show()
9. 主成分分析 (Principal Component Analysis, PCA)
主成分分析(PCA, Principal Component Analysis)是一种常用的数据降维技术,旨在将一组可能相关的变量转换为一组线性不相关的变量,称为主成分,同时尽可能多地保留原始数据集的信息。
import numpy as np from sklearn.decomposition import PCA import matplotlib.pyplot as plt # 生成示例数据 X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]]) # 创建PCA模型并拟合数据 pca = PCA(n_components=2) 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. 梯度提升 (Gradient Boosting)
梯度提升模型是一种集成学习方法,通过迭代地训练多个弱学习器(通常是决策树),并将它们组合成一个强学习器。梯度提升(Gradient Boosting)模型可以通过分析特征重要性来帮助我们理解数据中各个特征的相对重要程度。
import numpy as np from sklearn.ensemble import GradientBoostingClassifier # 生成示例数据 X = np.array([[1], [2], [3], [4], [5]]) y = np.array([0, 0, 0, 1, 1]) # 创建梯度提升模型并拟合数据 model = GradientBoostingClassifier(n_estimators=10) model.fit(X, y) # 预测 y_pred = model.predict(X) print("Predictions:", y_pred)