一文带你了解机器学习十大算法!
本文介绍了机器学习十大经典算法,包括线性回归、K近邻、朴素贝叶斯、逻辑回归、支持向量机、决策树、随机森林、GBDT、XGBoost和K-Means。对每个算法从原理、优缺点、适用场景三方面进行说明,并提供了Python代码示例。这些算法涵盖了监督学习、无监督学习等不同类别,适用于分类、回归、聚类等任务。文章还提供了获取机器学习入门书籍和AI科研指导的方式,帮助初学者系统学习。
大家好,今天我们来讲讲机器学习中经典的十大算法,包括原理、优缺点、代码等等,那下面我们就一起来看看吧
1 线性回归
原理:线性回归是一种预测数值型数据的监督学习算法。它通过拟合最佳直线来建立自变量和因变量的关系。这条最佳直线叫做回归线,并且用 Y = a * X + b 这条线性等式来表示。
优点:
-
模型简单,容易实现
-
许多非线性模型的基础
-
机器学习的基石
缺点:
-
对于非线性数据或者数据特征间具有相关性多项式回归难以建模
-
难以很好地表达高度复杂的数据
适用场景:适用于预测数值型数据的监督学习算法,适用于线性可分和特征空间不太大的情况。
代码展示:
from sklearn.linear_model import LinearRegression
import 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 KNeighborsClassifier
from sklearn.datasets import load_iris
from 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编程语言、深度学习框架、常用第三方库、理论、实战,以及必读的经典论文
如果需要全套书籍的高清电子版和代码, 可添加助理无偿获取
3 朴素贝叶斯
原理:朴素贝叶斯是一种基于概率理论的简单分类器,它假设预测变量之间相互独立。
优点:
-
朴素贝叶斯起源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率
-
对小规模的数据表现很好,能进行多分类
-
对缺失值不敏感,算法简单
缺点:
-
需要计算先验概率
-
对特征间强相关的模型分类效果不好
适用场景:适用于文本分类、情感分析、疾病诊断辅助等。
代码展示:
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 LogisticRegression
from 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 xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
# Load the breast cancer dataset
X, y = load_breast_cancer(return_X_y=True)
# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Create and train the model
model = xgb.XGBClassifier(random_state=42)
model.fit(X_train, y_train)
# Make predictions
y_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,已迭代六次(持续迭代中),我们会根据你的研究方向来规划学习路径,并且根据你的实验数据分为了时序、图结构、影像三大实验室,详细学习规划可添加小助理咨询
更多推荐
所有评论(0)