大家好,今天我们来讲讲机器学习中经典的十大算法,包括原理、优缺点、代码等等,那下面我们就一起来看看吧

1 线性回归

原理:线性回归是一种预测数值型数据的监督学习算法。它通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y = a * X + b 这条线性等式来表示。

优点:

  • 模型简单,容易实现

  • 许多非线性模型的基础

  • 机器学习的基石

缺点:

  • 对于非线性数据或者数据特征间具有相关性多项式回归难以建模

  • 难以很好地表达高度复杂的数据

适用场景:适用于预测数值型数据的监督学习算法,适用于线性可分和特征空间不太大的情况。

代码展示:

from sklearn.linear_model import LinearRegressionimport numpy as np# 创建数据集X = np.array([[1], [2], [3], [4], [5]])y = np.array([1, 2, 1.3, 3.75, 2.25])# 创建线性回归模型实例lin_reg = LinearRegression()# 训练模型lin_reg.fit(X, y)# 预测y_pred = lin_reg.predict(X)

2 K近邻算法(KNN)

原理:KNN算法是一种基于实例的学习,或者说是懒惰学习。它的核心思想是在预测新数据的类别时,不是通过训练学习输入数据到输出数据的映射关系,而是直接在分类时,将该数据与训练数据进行对比,找出与之最为相似的K个训练实例,然后根据这些实例的标签决定新数据的标签。

优点:

  • 理论成熟,思想简单

  • 可用于非线性

  • 准确度高

  • 对异常值不敏感

缺点:

  • 计算量大

  • 样本不均衡的问题

  • 需要大量的内存

适用场景:适用于分类和回归问题,特别适合于多分类问题,适合对稀有事件进行分类。

代码展示:

from sklearn.neighbors import KNeighborsClassifierfrom sklearn.datasets import load_irisfrom sklearn.model_selection import train_test_split# 加载数据集iris = load_iris()X, y = iris.data, iris.target# 划分训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建KNN分类器实例knn = KNeighborsClassifier(n_neighbors=3)# 训练模型knn.fit(X_train, y_train)# 预测测试集y_pred = knn.predict(X_test)【为初学者整理】另外我根据自己的入门经历和阅读经验,整理了一份针对机器学习深度学习新手的书单,总共有12本优质书籍!不仅包含了入门前需要掌握的前置知识,还兼顾了python编程语言、深度学习框架、常用第三方库、理论、实战,以及必读的经典论文

全套书籍.png

如果需要全套书籍的高清电子版和代码, 可添加助理无偿获取

3 朴素贝叶斯

原理:朴素贝叶斯是一种基于概率理论的简单分类器,它假设预测变量之间相互独立。

03.png

优点:

  • 朴素贝叶斯起源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率

  • 对小规模的数据表现很好,能进行多分类

  • 对缺失值不敏感,算法简单

缺点:

  • 需要计算先验概率

  • 对特征间强相关的模型分类效果不好

适用场景:适用于文本分类、情感分析、疾病诊断辅助等。

代码展示:

from sklearn.naive_bayes import GaussianNB# 创建朴素贝叶斯分类器实例nb = GaussianNB()# 训练模型(使用上面的X_train, y_train)nb.fit(X_train, y_train)# 预测(使用上面的X_test)y_pred = nb.predict(X_test)

4 逻辑回归

原理:逻辑回归是一种用于二分类问题的监督学习算法,它将数据映射到logit函数来预测事件发生的概率。因此,它也被称为logit回归

优点:

  • 实现简单,广泛应用于工业上

  • 分类时计算量非常小,速度很快,存储资源少

  • 可观测样本的概率分数

缺点:

  • 特征空间很大时,性能不是很好

  • 容易前拟合,一般准确度不高

  • 只能处理二分类线性可分问题

适用场景:最常用于解决二分类问题,但也可以扩展到多分类问题。可以用于预测某一事件发生的概率。

代码展示:

from sklearn.linear_model import LogisticRegressionfrom sklearn.datasets import make_classification# 创建数据集X, y = make_classification(n_samples=100, n_features=2, n_classes=2, random_state=42)# 创建逻辑回归模型实例log_reg = LogisticRegression()# 训练模型log_reg.fit(X, y)# 预测y_pred = log_reg.predict(X)

5 支持向量机

原理:支持向量机是一种强大的分类器,它的基本思想是在特征空间中寻找一个最优的超平面,以此来区分不同的类别。支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个最大间隔超平面。

优点:

  • 可以解决高维问题,即大型特征空间;

  • 能够处理非线性特征的相互作用;

  • 无需依赖整个数据。

缺点:

  • 当观测样本很多的时候,效率不是很高;

  • 对非线性问题没有通用的解决方案,很难找到一个合适的核函数;

  • 对缺失数据敏感。

适用场景:适用于分类和回归分析,特别适用于非线性问题和高维数据。

代码展示:

from sklearn.svm import SVC# 创建SVM分类器实例svm_clf = SVC(kernel='linear')# 训练模型(使用上面的X_train, y_train)svm_clf.fit(X_train, y_train)# 预测(使用上面的X_test)y_pred = svm_clf.predict(X_test)

6 决策树(DT)

原理:决策树是一种树形结构,用于分类和回归的决策规则。它通过学习简单的决策规则来预测目标变量的值。

优点:

  • 计算简单,易于理解,可解释行强

  • 比较适合有缺失属性的样本

  • 能够处理不相关的特征

  • 在短时间内可以对大型数据做出好的结果

缺点:

  • 容易发生过拟合

  • 易被攻击

  • 忽略了数据之间的相关性

  • 各个类别样本数量不一致的数据,信息增益偏向具有更多数值的特征

适用场景:适用于分类和回归问题,可以处理高维数据,不需要进行特征选择,可以处理缺失值和异常值。

代码展示:​​​​​​​

from sklearn.tree import DecisionTreeClassifier# 创建决策树分类器实例dec_tree = DecisionTreeClassifier()# 训练模型(使用上面的X_train, y_train)dec_tree.fit(X_train, y_train)# 预测(使用上面的X_test)y_pred = dec_tree.predict(X_test)

7 随机森林

原理:随机森林是一种集成学习方法,它通过构建多个决策树并输出平均结果来提高预测准确性。

优点:

  • 可以解决分类和回归问题

  • 抗过拟合能力强

  • 稳定性强

缺点:

  • 模型复杂

  • 计算成本高

  • 计算时间长

适用场景:适用于分类和回归问题,可以处理高维数据,不需要进行特征选择,可以处理缺失值和异常值。

代码展示:​​​​​​​

from sklearn.ensemble import RandomForestClassifier# 创建随机森林分类器实例rand_forest = RandomForestClassifier(n_estimators=100)# 训练模型(使用上面的X_train, y_train)rand_forest.fit(X_train, y_train)# 预测(使用上面的X_test)y_pred = rand_forest.predict(X_test)

8 GBDT(梯度提升)

原理:计算树的伪残差,通过前一棵树的残差拟合下一棵树,最终进行残差的加和。

优点:

  • 预测精度高

  • 适合低维数据

  • 能处理非线性数据

  • 可以灵活处理各种类型的数据,包括连续值和离散值

  • 在相对少的调参时间情况下,预测的准备率也可以比较高

缺点:

  • 由于弱学习器之间存在依赖关系,难以并行训练数据。不过可以通过自采样的SGBT来达到部分并行

  • 如果数据维度较高时会加大算法的计算复杂度

适用场景:不知道用什么模型时候可以使用的回归/分类模型

代码展示:​​​​​​​

from sklearn.ensemble import GradientBoostingClassifier# 创建梯度提升分类器实例gb_clf = GradientBoostingClassifier(n_estimators=100)# 训练模型(使用上面的X_train, y_train)gb_clf.fit(X_train, y_train)# 预测(使用上面的X_test)y_pred = gb_clf.predict(X_test)

9 XGBoost

原理:通过计算伪残差,计算加和(同GBDT)。

对比GBDT的改进(优点继承):

  • 传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑回归(分类问题)或者线性回归(回归问题)

  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数(能自定义损失函数)

  • gboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。正则项降低了模型的复杂度,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性

适用场景:各种比赛的大杀器,不知道用什么模型时候可以使用的回归/分类模型

代码:​​​​​​​

import xgboost as xgbfrom sklearn.datasets import load_breast_cancerfrom sklearn.model_selection import train_test_split# Load the breast cancer datasetX, y = load_breast_cancer(return_X_y=True)# Split the data into training and testing setsX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# Create and train the modelmodel = xgb.XGBClassifier(random_state=42)model.fit(X_train, y_train)# Make predictionsy_pred = model.predict(X_test)print("Predictions:", y_pred)

10 K-Means(K-均值)

原理:物以类聚,人以群分

优点:

  • 原理简单,容易实现 

  • 内存占用小

缺点:

  • K值需要预先给定,属于预先知识,很多情况下K值的估计是非常困难的,对于像计算全部微信用 户的交往圈这样的场景就完全的没办法用K-Means进行

  • K-Means算法对初始选取的聚类中心点是敏感的,不同的随机种子点得到的聚类结果完全不同(K-Means++)

  • K均值算法并不适合所有的数据类型

  • 对离群点的数据进行聚类时,K均值也有问题,这种情况下,离群点检测和删除有很大的帮助

适用场景:没有明确标签的情况下,我们经常用聚类模型来进行操作。

代码展示:​​​​​​​

from sklearn.cluster import KMeans# 创建K-均值聚类实例kmeans = KMeans(n_clusters=3)# 训练模型(使用上面的X_train)kmeans.fit(X_train)# 预测y_pred = kmeans.predict(X_train)

放在最后:

另外想结合AI发文发刊,但不知道怎么做创新的同学,我们team磨练出了一套系统且专业的传统学科交叉AI科研入门方案,可带学生发paper,已迭代六次(持续迭代中),我们会根据你的研究方向来规划学习路径,并且根据你的实验数据分为了时序、图结构、影像三大实验室,详细学习规划可添加小助理咨询

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐