你好,我是kk~
今儿总结了10个最重要的机器学习算法,按照大家熟悉的顺便,整理了出来。并提供它们的原理、公式、Python代码示例以及相应的图形展示。
线性回归
逻辑回归
决策树
支持向量机
随机森林
K-最近邻
K均值聚类
主成分分析
朴素贝叶斯
梯度提升决策树
如果大家觉得对自己有帮助,欢迎点赞、关注!
1. 线性回归 (Linear Regression)
原理: 线性回归试图找到特征和目标值之间的线性关系。它假设目标值可以被特征的线性组合预测。
公式:
其中,
是目标变量,
是特征,
是模型参数,
是误差项。
Python代码示例:
from sklearn.linear_model import LinearRegressionimport numpy as npimport 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.show()
2. 逻辑回归 (Logistic Regression)
原理: 用于分类任务,它使用Sigmoid函数将线性回归的结果映射到0和1之间,用于预测概率。
公式:
是属于正类的概率,
是特征,
是模型参数。
Python代码示例:
from sklearn.linear_model import LogisticRegressionimport numpy as npimport matplotlib.pyplot as plt# 创建数据X = np.array([[1], [2], [3], [4], [5]])y = np.array([0, 0, 1, 1, 1])# 训练模型model = LogisticRegression()model.fit(X, y)# 预测y_pred = model.predict_proba(X)[:, 1]# 绘图plt.scatter(X, y, color='blue')plt.plot(X, y_pred, color='red')plt.show()
3. 决策树 (Decision Trees)
原理: 决策树通过一系列问题(基于特征的测试)来进行分类或回归。每个内部节点代表一个特征的测试,每个分支代表测试的结果,每个叶节点代表一个类别(分类树)或一个具体值(回归树)。
公式: 决策树通常基于信息增益(IG)或基尼不纯度(Gini Impurity)来分裂节点。
信息增益:
基尼不纯度:
Python代码示例:
from sklearn.tree import DecisionTreeClassifierfrom sklearn import treeimport matplotlib.pyplot as plt# 创建数据X = [[0, 0], [1, 1]]y = [0, 1]# 训练模型clf = DecisionTreeClassifier()clf.fit(X, y)# 绘制决策树tree.plot_tree(clf)plt.show()
4. 支持向量机 (Support Vector Machines, SVM)
原理: SVM 通过找到最佳超平面将数据点划分为不同的类别。这个超平面被选为最大化不同类别数据点间的边距。
公式:
超平面定义:
优化目标: 最大化边距
Python代码示例:
from sklearn.svm import SVCimport matplotlib.pyplot as pltimport numpy as np# 创建数据X = np.array([[1, 2], [5, 8], [1.5, 1.8], [8, 8], [1, 0.6], [9, 11]])y = [0, 1, 0, 1, 0, 1]# 训练模型clf = SVC(kernel='linear')clf.fit(X, y)# 绘制数据点和决策边界plt.scatter(X[:, 0], X[:, 1], c=y)ax = plt.gca()xlim = ax.get_xlim()ylim = ax.get_ylim()# 创建网格xx, yy = np.meshgrid(np.linspace(xlim[0], xlim[1], 50), np.linspace(ylim[0], ylim[1], 50))Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)# 绘制决策边界ax.contour(xx, yy, Z, colors='k', levels=[-1, 0, 1], alpha=0.5,linestyles=['--', '-', '--'])plt.show()
5. 随机森林 (Random Forest)
原理: 随机森林是一种集成学习方法,它通过构建多个决策树并将它们的预测结果进行平均或多数投票来提高预测精度。
公式: 没有一个固定的公式,但算法基于决策树的集成,每棵树都是在数据的一个随机子集上训练得到的。
Python代码示例:
from sklearn.ensemble import RandomForestClassifierimport matplotlib.pyplot as pltimport numpy as np# 创建数据X = [[0, 0], [1, 1], [2, 2], [3, 3]]y = [0, 1, 1, 0]# 训练模型clf = RandomForestClassifier(n_estimators=10)clf.fit(X, y)# 预测y_pred = clf.predict(X)# 绘图plt.scatter(np.array(X)[:, 0], np.array(X)[:, 1], c=y_pred)plt.show()
6. K-最近邻 (K-Nearest Neighbors, KNN)
原理: KNN算法基于距离的分类算法,它为输入点找到最近的K个邻居,然后基于这些邻居的类别来预测点的类别。
公式:
距离度量(例如欧几里得距离):
Python代码示例:
from sklearn.neighbors import KNeighborsClassifierimport matplotlib.pyplot as pltimport numpy as np# 创建数据X = np.array([[1, 2], [2, 3], [3, 3], [6, 8], [7, 8], [8, 9]])y = [0, 0, 0, 1, 1, 1]# 训练模型knn = KNeighborsClassifier(n_neighbors=3)knn.fit(X, y)# 绘图plt.scatter(X[:, 0], X[:, 1], c=y)plt.show()
7. K均值聚类 (K-Means Clustering)
原理: 一个无监督学习算法,它将数据划分为K个集群。每个数据点被分配到最近的质心,形成一个集群。
公式:
目标是最小化每个点到其质心的距离之和:
其中
是簇,
是簇的质心。
Python代码示例:
from sklearn.cluster import KMeansimport matplotlib.pyplot as pltimport numpy as np# 创建数据X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])# 训练模型kmeans = KMeans(n_clusters=2)kmeans.fit(X)# 获取簇标签y_kmeans = kmeans.predict(X)# 绘图plt.scatter(X[:, 0], X[:, 1], c=y_kmeans)plt.show()
8. 主成分分析 (Principal Component Analysis, PCA)
原理: PCA是一种降维算法,它通过正交变换将数据转换到新的坐标系,这些新坐标(主成分)是原始数据的线性组合,能够最大化方差。
公式:
协方差矩阵
的特征值分解或奇异值分解。
Python代码示例:
from sklearn.decomposition import PCAimport matplotlib.pyplot as pltimport numpy as np# 创建数据X = np.random.rand(50, 3)# 训练模型pca = PCA(n_components=2)X_r = pca.fit_transform(X)# 绘图plt.scatter(X_r[:, 0], X_r[:, 1])plt.show()
9. 朴素贝叶斯 (Naive Bayes)
原理: 基于贝叶斯定理,假设每个特征在给定类别的条件下是相互独立的。它通过计算每个类的后验概率并选择概率最高的类。
公式: $ P(y|x_1,...,x_n) = \fracP(y) \prod_{i=1}^{n} P(x_iy){P(x_1,...,x_n)} $
Python代码示例:
from sklearn.naive_bayes import GaussianNBimport numpy as npimport matplotlib.pyplot as plt# 创建数据X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])y = np.array([1, 1, 0, 0])# 训练模型model = GaussianNB()model.fit(X, y)# 预测y_pred = model.predict(X)# 绘图plt.scatter(X[:, 0], X[:, 1], c=y_pred)plt.show()
10. 梯度提升决策树 (Gradient Boosting Decision Trees, GBDT)
原理: GBDT是一个集成算法,它通过顺序地添加决策树,每一棵新树都尝试修正之前所有树的预测误差。每一棵树学习的是前一棵树残差的预测。
公式:
其中
是第t轮迭代的模型,
是新添加的决策树,
是该树的贡献率。
Python代码示例:
from sklearn.ensemble import GradientBoostingClassifierimport numpy as npimport matplotlib.pyplot as plt# 创建数据X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])y = np.array([0, 1, 1, 0])# 训练模型clf = GradientBoostingClassifier()clf.fit(X, y)# 预测y_pred = clf.predict(X)# 绘图plt.scatter(X[:, 0], X[:, 1], c=y_pred)plt.show()
这些算法覆盖了监督学习、非监督学习和集成学习的多个领域,是机器学习中最核心和常用的算法。
好了,今天就聊这么多,如果有更多的问题,随时留言沟通!