门户网站是网络表达吗,工业和信息化部投诉电话,阳江问政平台官网入口,网站开发与设计的参考文献省流版#xff1a;
本文介绍机器学习中的回归算法#xff1a;逻辑回归、KNN、SVM、随机森林和XGBoost。作为机器学习的有监督学习方法#xff0c;分类模型是最重要也是最常见的一类算法#xff0c;在数据分析等岗位的笔试面试中都是常客#xff0c;非常值得深入研究…省流版
本文介绍机器学习中的回归算法逻辑回归、KNN、SVM、随机森林和XGBoost。作为机器学习的有监督学习方法分类模型是最重要也是最常见的一类算法在数据分析等岗位的笔试面试中都是常客非常值得深入研究
内容很多创作不易如果对你有帮助的话还请三连支持~ 有监督学习——分类算法目的是根据输入的特征将数据分为不同的类别从而对数据进行分类 逻辑回归 原理逻辑回归模型基于线性回归模型通过对线性组合进行非线性映射将结果映射到0和1之间的概率值表示某个样本属于某个类别的概率。
公式
sigmoid激活函数其中h(x)是样本x属于正类的概率θ是模型参数
sigmoid激活函数的输出值始终在0和1之间而且当输入为0时输出为0.5。在逻辑回归模型中sigmoid函数将线性方程的输出转换为属于0到1之间的概率值为我们提供了一个 评估样本是否属于某个分类的工具。siemoi激活函数的优点是它可以对输入信号进行非线性映射和压缩使输入信号更具表达力。但是缺点是它产生了“梯度消失”问题因为在极端值(远离0)处斜率接近0这意味着梯度也会很小从而导致训练变慢或停止。 损失函数 定义交叉熵损失函数。推导方法根据函数图像理解
给定y1时损失函数为-log(p)估计出来的概率p越小损失函数越大当概率p取0即预估的分类结果y0时loss值是趋近于正无穷的表明我们分错了实际分类结果是1给定y0时损失函数为-log(1-p)估计出来的概率p越大损失函数越大当概率p取1即预估的分类结果y1时loss值是趋近于正无穷的表明我们分错了实际分类结果是1 Python代码 Python
# 导入所需的库
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 创建示例数据
X, y make_classification(n_samples1000, n_features10, n_classes2, random_state42)# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建逻辑回归模型对象
model LogisticRegression()# 使用训练数据拟合模型
model.fit(X_train, y_train)# 使用模型进行预测
y_pred model.predict(X_test)# 计算模型准确率
accuracy accuracy_score(y_test, y_pred)
print(模型准确率, accuracy) K近邻KNN 原理
如果一个样本在特征空间中的K个最近邻中的大多数属于某个类别则该样本也属于这个类别。分类问题KNN通过计算样本与训练集中所有样本的距离并选择距离最近的K个样本来确定样本的类别。回归问题KNN通过计算最近邻的平均值来预测目标变量的值。
计算方法
选择距离度量方法通常使用欧氏距离两点直线距离或曼哈顿距离沿轴的距离等作为距离度量方法。计算距离对于每个待预测的样本计算它与训练集中所有样本的距离。选择最近的K个样本根据计算得到的距离选择距离最近的K个样本。投票或平均对于分类问题采用多数投票的方式确定样本的类别对于回归问题采用这K个样本的平均值作为预测值。
Python
# 导入所需的库
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score# 加载鸢尾花数据集
iris load_iris()
X iris.data
y iris.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建KNN分类器对象设置K3
knn_classifier KNeighborsClassifier(n_neighbors3)# 使用训练数据拟合模型
knn_classifier.fit(X_train, y_train)# 使用模型进行预测
y_pred knn_classifier.predict(X_test)# 计算模型准确率
accuracy accuracy_score(y_test, y_pred)
print(模型准确率, accuracy) 文中部分内容来自GPT4.0生成对我个人而言这是最重要的生产力工具之一详细的使用教程可以参见下面这篇博客GPT4.0使用教程 支持向量机SVM 原理
在分类问题中支持向量机的目标是找到一个超平面将不同类别的样本分隔开同时使得间隔margin最大化。支持向量机的核心思想是利用支持向量即距离超平面最近的样本点来构建分类决策边界。
计算方法
选择核函数支持向量机可以使用不同的核函数来处理非线性分类问题常用的核函数包括线性核、多项式核、高斯核等。构建优化问题支持向量机的优化问题通常是一个凸优化问题其目标是最大化间隔并且满足约束条件即使得样本点被正确地分类。求解优化问题可以使用优化算法如SMO算法、梯度下降等来求解支持向量机的优化问题得到最优的分类超平面和支持向量。预测利用训练得到的模型对新的样本进行分类预测根据样本到超平面的距离来判断其所属类别。
核函数的作用
将数据映射到高维空间 核函数将原始输入空间中的数据映射到一个更高维的特征空间中使得原本线性不可分的问题变得线性可分。这种映射通常是非线性的因此可以将低维空间中复杂的数据结构映射到高维空间中的简单结构。构建非线性决策边界 在高维特征空间中线性分类器如超平面能够更容易地将数据分开从而构建一个非线性决策边界。这使得 SVM 能够处理非线性分类问题并且具有很强的泛化能力。避免计算高维空间的复杂性 尽管核函数将数据映射到了高维空间但 SVM 的优化问题仍然是在原始输入空间中求解的。核函数的巧妙之处在于它们通过内积计算的方式避免了显式地计算高维特征空间中的数据点从而减少了计算的复杂性。
SVM怎么解决多分类问题 支持向量机Support Vector MachineSVM最初是用于解决二分类问题的但可以通过一些技巧扩展到多分类问题。下面是一些常用的方法
一对一One-vs-One方法 这种方法将每个类别的样本分为一组然后构建一对一的二分类器。也就是说对于K个类别将会构建K*(K-1)/2个分类器。当需要进行分类时每个分类器投票给一个类别最终选择得票最多的类别作为样本的分类结果。一对其余One-vs-Rest方法 这种方法将每个类别的样本作为一个类别而其他所有类别的样本作为另一个类别。然后构建K个二分类器每个分类器都是将一个类别的样本与其他所有类别的样本进行区分。在预测时选择具有最高置信度的类别作为样本的分类结果。多类别SVM 一些SVM库和算法可以直接处理多分类问题。例如LibSVM库中的多类别分类器就支持直接处理多分类问题。这些算法在内部实现了类似于一对一或者一对其余的策略但是更高效并且对参数调整更加友好。 Python# 导入所需的库
import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 创建示例数据
X, y make_classification(n_samples1000, n_features10, n_classes2, random_state42)# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建逻辑回归模型对象
model LogisticRegression()# 使用训练数据拟合模型
model.fit(X_train, y_train)# 使用模型进行预测
y_pred model.predict(X_test)# 计算模型准确率
accuracy accuracy_score(y_test, y_pred)
print(模型准确率, accuracy) 随机森林
原理
随机森林由多个决策树组成每个决策树都是基于随机抽取的样本和随机选择的特征进行训练的。最终的分类或回归结果是基于所有决策树的投票或平均得到的。
什么是决策树
决策树算法是一种基于树形结构的分类和预测模型。决策树的每个节点代表一种决策每个分支代表一个可能的结果。通过计算不同的属性值和分类标签之间的信息增益或者基尼指数决策树算法能够自动检测出最相关的属性并以此来判断分类标签。
计算方法
随机抽样训练样本从原始训练数据集中随机抽取一定比例的样本用于训练每棵决策树。随机选择特征对于每棵决策树的每个节点随机选择一定数量的特征进行分裂。 构建决策树利用随机抽样的训练样本和随机选择的特征构建多棵决策树。每棵树都会根据特征的信息增益或基尼系数等准则进行分裂直到达到停止条件为止。集成预测对于分类任务采用多数投票的方式对于回归任务采用平均值的方式将所有决策树的预测结果进行集成得到最终的预测结果。
两处随机
在构建森林的时候每一棵树用一个随机抽样的数据集在构建树的过程中每次分裂都使用特征的一个随机子集。
随机森林不需要标准化
随机森林算法不受输入特征的尺度影响因为它是基于决策树的集成学习算法。决策树的分裂点并不依赖于特征的尺度而是根据数据的不纯度来选择最佳的分裂点。因此对特征进行标准化或归一化不会对随机森林的性能产生明显影响。
XGBoost和随机森林区别
XGBoost随机森林基础学习器梯度提升决策树每棵树的构建是通过迭代拟合残差多棵决策树每棵树独立建立通过随机选择特征和样本来构建不同的树然后将它们的结果进行集成集成方式加法模型通过组合多个弱学习器得到一个强大的模型。每个弱学习器都是在前面学习器的基础上通过梯度下降的方式来最小化损失函数。随机森林采用投票或平均的方式对多棵决策树的结果进行集成对于分类问题采用多数投票对于回归问题采用平均值。参数学习率、树的深度、子采样比例等决策树的数量、每棵树的最大深度等性能更适用大规模数据、高维稀疏数据更适用于相对低维、特征较少 Python
# 导入所需的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score# 加载示例数据集
iris datasets.load_iris()
X iris.data
y iris.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建随机森林分类器对象
rf_classifier RandomForestClassifier(n_estimators100, random_state42)# 使用训练数据拟合模型
rf_classifier.fit(X_train, y_train)# 使用模型进行预测
y_pred rf_classifier.predict(X_test)# 计算模型准确率
accuracy accuracy_score(y_test, y_pred)
print(模型准确率, accuracy) XGBoost 原理
通过迭代地训练决策树模型并利用梯度下降的方法来最小化损失函数。在每一轮迭代中XGBoost 首先计算出当前模型的梯度和二阶导数然后构建一个新的决策树模型来拟合这些梯度和二阶导数以减小损失函数。最终多个决策树模型的预测结果进行加权平均得到最终的预测结果。
计算方法 初始化预测值首先将所有样本的预测值初始化为一个常数通常选择训练数据中的目标变量的平均值。迭代训练决策树通过多轮迭代每轮迭代都训练一个新的决策树模型以最小化损失函数。计算损失函数的一阶和二阶导数对于给定的目标变量和当前模型的预测值计算损失函数的一阶导数梯度和二阶导数Hessian矩阵。构建决策树模型基于损失函数的一阶和二阶导数构建一个新的决策树模型使得在每个叶子节点上的值最小化损失函数。更新预测值利用新构建的决策树模型更新所有样本的预测值。重复迭代重复以上步骤直到达到预定的迭代次数或者达到损失函数的停止条件。
XGBoost和随机森林区别
XGBoost随机森林基础学习器梯度提升决策树每棵树的构建是通过迭代拟合残差多棵决策树每棵树独立建立通过随机选择特征和样本来构建不同的树然后将它们的结果进行集成集成方式加法模型通过组合多个弱学习器得到一个强大的模型。每个弱学习器都是在前面学习器的基础上通过梯度下降的方式来最小化损失函数。随机森林采用投票或平均的方式对多棵决策树的结果进行集成对于分类问题采用多数投票对于回归问题采用平均值。参数学习率、树的深度、子采样比例等决策树的数量、每棵树的最大深度等性能更适用大规模数据、高维稀疏数据更适用于相对低维、特征较少
boosting算法属于串行为什么xgboost可以并行训练 特征并行将特征按照列进行切分每个处理器负责处理一部分特征可以加速特征的处理过程。数据并行将数据按照行进行切分每个处理器负责处理一部分数据可以加速模型的训练过程。基学习器并行Xgboost算法支持多线程训练可以同时训练多个基学习器加快训练速度。分布式训练:Xgboost算法支持分布式训练可以将数据分布在多台机器上进行训练进一步加速训练速度。
xgboost怎么解决样本不均衡问题 采样方法欠采样或过采样调整样本权重 调整样本权重import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 假设 X_train, y_train 是训练集的特征和标签
# X_test, y_test 是测试集的特征和标签# 将数据转换为 DMatrix 格式
dtrain xgb.DMatrix(X_train, labely_train)
dtest xgb.DMatrix(X_test, labely_test)# 设置样本权重
# 假设客户流失的样本权重为 5客户不流失的样本权重为 1
weight [5 if label 1 else 1 for label in y_train]# 定义参数
params {objective: binary:logistic,eval_metric: error,# 设置正例的权重scale_pos_weight: sum(y_train 0) / sum(y_train 1),
}# 训练模型
bst xgb.train(params, dtrain, num_boost_round100, evals[(dtest, test)], early_stopping_rounds10, verbose_evalFalse)# 在测试集上进行预测
y_pred bst.predict(dtest)
y_pred_binary [1 if p 0.5 else 0 for p in y_pred]# 计算准确率
accuracy accuracy_score(y_test, y_pred_binary)
print(Accuracy: %.2f%% % (accuracy * 100.0))
Python # 导入所需的库
import xgboost as xgb
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score# 加载示例数据集
iris datasets.load_iris()
X iris.data
y iris.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 构建 XGBoost 分类器对象
xgb_classifier xgb.XGBClassifier()# 使用训练数据拟合模型
xgb_classifier.fit(X_train, y_train)# 使用模型进行预测
y_pred xgb_classifier.predict(X_test)# 计算模型准确率
accuracy accuracy_score(y_test, y_pred)
print(模型准确率, accuracy) 总结
本期内容主要介绍了回归算法。作为有监督算法的一种回归算法是最常见、最重要也是在业务场景中使用的最多的一类机器学习算法在保研考研复试和数据分析等岗位面试中经常出现非常值得深入研究。
文中部分内容来自GPT4.0生成对我个人而言这是最重要的生产力工具之一详细的使用教程可以参见下面这篇博客
GPT4.0使用教程