2026/1/16 15:34:41
网站建设
项目流程
网站平台怎么做,外贸seo网站开发,网站职业技能培训有哪些项目,杭州网站建设哪里好文章目录分类模型的可信度评估分类模型中的预测准确率分类模型中的决定系数分类模型的可信度评估
分类算法的目标时为目标数据预测分类#xff0c;结果时离散型的数值。但算法实际在分类的过程中#xff0c;会认为某个数据点有“80%”的可能性属于分类1#xff0c;有“20%”…文章目录分类模型的可信度评估分类模型中的预测准确率分类模型中的决定系数分类模型的可信度评估分类算法的目标时为目标数据预测分类结果时离散型的数值。但算法实际在分类的过程中会认为某个数据点有“80%”的可能性属于分类1有“20%”的可能性属于分类0在最终的预测结果中模型会根据“可能性比较大”的方式来分配分类标签。分类模型中的预测准确率在scikit-learn中很多用于分类的模型都有一个predict_proba功能用于计算模型在对数据集进行分类时每个样本属于不同分类的可能性是多少。# 导入必要的库fromsklearn.datasetsimportmake_blobs# 用于生成模拟的聚类数据importmatplotlib.pyplotasplt# 用于数据可视化# 使用make_blobs函数生成数据集# n_samples200: 生成200个样本点# random_state1: 设置随机种子为1确保每次运行生成的随机数据相同便于结果复现# centers2: 生成2个聚类中心两类数据# cluster_std5: 每个聚类的标准差为5控制数据点的分散程度值越大数据点越分散X,ymake_blobs(n_samples200,random_state1,centers2,cluster_std5)# 绘制散点图# X[:,0]: 取X的第一列作为x轴坐标所有行的第0列# X[:,1]: 取X的第二列作为y轴坐标所有行的第1列# cy: 使用标签y作为颜色映射的依据不同类别显示不同颜色# cmapplt.cm.cool: 使用cool色彩映射是一种从蓝到紫的渐变色系# edgecolorsk: 设置数据点边缘为黑色(k是黑色的简写)使点与点之间更容易区分plt.scatter(X[:,0],X[:,1],cy,cmapplt.cm.cool,edgecolorsk)# 显示图形plt.show()# 导入高斯朴素贝叶斯分类器# 高斯朴素贝叶斯假设每个特征的条件概率服从高斯分布正态分布fromsklearn.naive_bayesimportGaussianNB# 导入train_test_split函数用于将数据集分割为训练集和测试集fromsklearn.model_selectionimporttrain_test_split# 使用train_test_split函数将数据集划分为训练集和测试集# X: 特征矩阵包含所有样本的特征数据# y: 目标变量包含所有样本的类别标签# test_size: 未指定默认为0.25表示25%的数据作为测试集75%作为训练集# random_state68: 设置随机种子为68确保每次运行划分结果一致便于实验复现# 返回值# X_train: 训练集特征# X_test: 测试集特征# y_train: 训练集标签# y_test: 测试集标签X_train,X_test,y_train,y_testtrain_test_split(X,y,random_state68)# 创建高斯朴素贝叶斯分类器的实例# GaussianNB不需要任何参数即可初始化但也可设置参数如# var_smoothing: 添加到方差计算中的稳定性参数防止除零错误gnbGaussianNB()# 使用训练数据拟合训练朴素贝叶斯分类器# fit方法会计算每个类别下每个特征的平均值和方差# 这些统计量将用于计算新样本的条件概率gnb.fit(X_train,y_train)# 使用训练好的模型预测测试集样本属于每个类别的概率# predict_proba返回一个数组每行对应一个测试样本每列对应一个类别# 每行的概率值之和为1# 对于二分类问题返回两列[类别0的概率, 类别1的概率]predict_probagnb.predict_proba(X_test)# 打印预测概率数组的形状# 形状为 (测试样本数, 类别数)# 例如(50, 2) 表示有50个测试样本每个样本有2个类别的概率print(predict_proba.shape)(50, 2)print(predict_proba[:5])[[0.98849996 0.01150004] [0.0495985 0.9504015 ] [0.01648034 0.98351966] [0.8168274 0.1831726 ] [0.00282471 0.99717529]]# 导入numpy库用于数值计算和数组操作importnumpyasnp# 设置绘图区域的边界范围# 获取第一个特征(X[:,0])的最小值和最大值并向外扩展0.5个单位# 这样可以让数据点不会紧贴图形边缘使图形更美观x_min,x_maxX[:,0].min()-0.5,X[:,0].max()0.5# 获取第二个特征(X[:,1])的最小值和最大值并向外扩展0.5个单位y_min,y_maxX[:,1].min()-0.5,X[:,1].max()0.5# 创建网格坐标矩阵# np.arange(start, stop, step): 生成从start到stop不包含的等差数列步长为step# np.meshgrid(): 从两个一维数组中生成网格坐标矩阵# xx和yy都是二维数组表示网格中每个点的(x, y)坐标# 步长0.2决定了网格的密度值越小网格越密决策边界越平滑xx,yynp.meshgrid(np.arange(x_min,x_max,0.2),# 生成x轴的网格点np.arange(y_min,y_max,0.2)# 生成y轴的网格点)# 对网格上的每个点进行概率预测# np.c_[xx.ravel(), yy.ravel()]:# - xx.ravel()和yy.ravel()将二维网格展平为一维数组# - np.c_[]按列连接两个数组生成一个N×2的矩阵每行是一个网格点的坐标# gnb.predict_proba(): 预测每个网格点属于各个类别的概率# [:,1]: 取所有行的第二列即属于类别1的概率# 对于二分类问题gnb.predict_proba()返回两列[P(类别0), P(类别1)]Zgnb.predict_proba(np.c_[xx.ravel(),yy.ravel()])[:,1]# 将预测结果重塑为与xx、yy相同的二维形状# 这样Z的每个元素对应网格中相应位置的预测概率ZZ.reshape(xx.shape)# 绘制决策区域的等高线填充图# contourf(): 绘制填充等高线用颜色表示不同区域的概率值# xx, yy: 网格坐标# Z: 每个网格点属于类别1的概率值# cmapplt.cm.summer: 使用summer颜色映射从绿到黄# alpha0.8: 设置透明度为0.8使下方的散点图可以部分显示plt.contourf(xx,yy,Z,cmapplt.cm.summer,alpha0.8)# 绘制训练集的散点图# X_train[:,0], X_train[:,1]: 训练集的两个特征作为x、y坐标# cy_train: 根据真实标签着色# cmapplt.cm.cool: 使用cool颜色映射蓝到紫# edgecolorsk: 数据点边缘为黑色增强可区分性plt.scatter(X_train[:,0],X_train[:,1],cy_train,cmapplt.cm.cool,edgecolorsk)# 绘制测试集的散点图# 参数与训练集相似但添加alpha0.6使测试集点半透明# 这样可以区分训练集和测试集同时看到重叠部分plt.scatter(X_test[:,0],X_test[:,1],cy_test,cmapplt.cm.cool,edgecolorsk,alpha0.6)# 设置x轴和y轴的显示范围# 使用网格的边界作为坐标轴范围plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())# 隐藏坐标轴刻度# 使图形更简洁专注于决策边界和数据分布plt.xticks(())plt.yticks(())# 显示图形plt.show()背景颜色决策区域绿色区域属于类别1的概率较低黄色区域属于类别1的概率较高颜色渐变表示概率的连续变化数据点颜色蓝色点属于类别0的数据紫色点属于类别1的数据训练集点实心用于训练模型的样本测试集点半透明用于评估模型的样本不是每个分类算法都有predict_proba属性不过我们还可以使用另一种方式来检查分类的可信度就是决定系数decision_fuinction分类模型中的决定系数决定系数在二元分类任务中只返回一个值如果是正数代表该数据点属于分类1如果是附属则代表属于分类2。这里使用向量机分类器SVC的decision_function为例# 从sklearn.svm模块导入支持向量机分类器SVC# SVCSupport Vector Classification是一种基于支持向量机SVM的分类器fromsklearn.svmimportSVC# 创建SVC分类器实例使用默认参数初始化# 默认参数包括# - C1.0正则化参数控制软间隔的惩罚强度# - kernelrbf使用径向基函数高斯核作为核函数# - gammascale核函数的系数scale表示1/(n_features * X.var())# - 其他参数均为默认值svcSVC()# 使用训练数据拟合训练SVM分类器# fit()方法会# 1. 根据选择的核函数将数据映射到高维空间# 2. 寻找最优分隔超平面最大间隔超平面# 3. 确定支持向量# 4. 计算决策函数参数svc.fit(X_train,y_train)# 计算测试样本到决策超平面的有符号距离# decision_function()返回每个测试样本到决策超平面的有符号距离# 对于二分类问题# - 正值表示样本被分类为类别1# - 负值表示样本被分类为类别0# - 值越大正或越小负表示离决策边界越远分类置信度越高# - 值为0表示样本正好在决策边界上# 对于多分类问题one-vs-one返回形状为(n_samples, n_classes*(n_classes-1)/2)dec_funcsvc.decision_function(X_test)# 打印前5个测试样本的决策函数值# 这些值可以帮助理解模型对每个样本的分类置信度print(dec_func[:5])[-1.36071347 1.53694862 1.78825594 -0.96133081 1.81826853] 正数属于分类1 负数属于分类2# 计算网格点上每个点的决策函数值# np.c_[xx.ravel(), yy.ravel()]: 将二维网格坐标展平并组合成N×2的矩阵# 每一行是网格中的一个点的(x, y)坐标# svc.decision_function(): 计算每个网格点到SVM决策超平面的有符号距离Zsvc.decision_function(np.c_[xx.ravel(),yy.ravel()])# 将计算得到的决策函数值重新整形为与网格坐标xx相同的二维形状# 这样每个Z[i,j]就对应网格点(xx[i,j], yy[i,j])的决策函数值ZZ.reshape(xx.shape)# 绘制决策函数值的等高线填充图# contourf()函数用不同颜色填充不同值的区域# xx, yy: 网格坐标# Z: 每个网格点的决策函数值# cmapplt.cm.summer: 使用summer颜色映射绿到黄# alpha0.8: 设置透明度为0.8使底层散点图可见plt.contourf(xx,yy,Z,cmapplt.cm.summer,alpha0.8)# 绘制训练集的散点图# X_train[:,0], X_train[:,1]: 训练集样本的两个特征作为x和y坐标# cy_train: 根据真实标签着色# cmapplt.cm.cool: 使用cool颜色映射蓝到紫# edgecolorsk: 数据点边缘为黑色增强可区分性plt.scatter(X_train[:,0],X_train[:,1],cy_train,cmapplt.cm.cool,edgecolorsk)# 绘制测试集的散点图# 参数与训练集类似但添加alpha0.6使测试集点半透明# 这样可以区分训练集和测试集同时看到重叠部分plt.scatter(X_test[:,0],X_test[:,1],cy_test,cmapplt.cm.cool,edgecolorsk,alpha0.6)# 设置x轴和y轴的显示范围# 使用网格的最小值和最大值作为坐标轴范围确保图形完整显示plt.xlim(xx.min(),xx.max())plt.ylim(yy.min(),yy.max())# 添加图形标题plt.title(SVC decision_function)# 隐藏坐标轴刻度# 使图形更简洁专注于决策函数和数据分布plt.xticks(())plt.yticks(())# 显示图形plt.show()