当前位置: 首页 > news >正文

长治做网站公司什么是一学一做视频网站好

长治做网站公司,什么是一学一做视频网站好,镇江久一信息技术有限公司,如何提升网站打开速度文章目录 什么是支持向量机#xff1f;基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例#xff08;1#xff09;实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例#xff08;2#xff09;实例步骤导入数据… 文章目录 什么是支持向量机基本原理数学模型 支持向量机模型模型参数属性信息 支持向量机实例1实例步骤读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果完整代码 支持向量机实例2实例步骤导入数据处理数据切分划分数据创建SVM模型训练数据测试数据自测测试集测试 得到分类报告及准确率完整代码与KNN算法准确率做对比KNN完整代码 什么是支持向量机 支持向量机Support Vector MachineSVM是一种监督式学习的分类算法也可用于回归分析。它的主要目标是在特征空间中找到一个最优的超平面从而将不同类别的数据点尽可能分开。这个超平面被定义为能够使两类数据之间的间隔Margin最大的平面。 基本原理 线性可分情况 假设有两类数据点分别标记为正类和负类。在二维空间中这些数据点可以用平面直角坐标系中的点来表示。如果这些数据是线性可分的那么可以找到一条直线在高维空间中是超平面将这两类数据分开。 支持向量机在寻找这个分离超平面时不仅要找到能分开两类数据的平面还要使这个平面到两类数据中最近的数据点的距离最大。这些最近的数据点就被称为支持向量。 非线性可分情况 当数据在原始空间中不是线性可分的时候支持向量机通过使用核函数Kernel Function将原始数据映射到一个高维空间使得在高维空间中数据变得线性可分。 例如在二维平面上有一个圆形分布的数据正类在圆内负类在圆外这在二维空间中无法用直线分开。但是通过核函数将其映射到三维空间后就可能找到一个平面将它们分开。常用的核函数有线性核、多项式核、高斯核径向基函数核等。 数学模型 目标函数 拉格朗日乘子法求解 支持向量机模型 模型参数 重要的参数有C、kernel、degree、gamma。 C 惩罚因子【浮点数默认为1.】【软间隔】(1)C越大对误分类的惩罚增大希望松弛变量接近0趋向于对训练集全分对的情况这样对训练集测试时准确率很高但泛化能力弱(2)C值小对误分类的惩罚减小允许容错将他们当成噪声点泛化能力较强。-建议通过交叉验证来选择 kernel 核函数【默认rbf(径向基核函数|高斯核函数)】可以选择线性(linear)、多项式(poly)、sigmoid-多数情况下选择rbf degree: 【整型默认3维】多项式poly函数的维度默认是3选择其他核函数时会被忽略。-按默认【选择rbf之后此参数不起作用】指上面式子中的n gamma: ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数。默认是’auto’。(1)如果gamma是’auto’那么实际系数是1 / n_features也就是数据如果有10个特征那么gamma值维0.1。(sklearn0.21版本)(2)在sklearn0.22版本中默认为’scale’,此时gamma1 / (n_features*X.var())#X.var()数据集所有值的方差。1gamma越大过拟合风险越高2 gamma越小过拟合风险越低-建议通过交叉验证来选择 coef0: 核函数中的独立项。多项式的偏置项。它只在’poly’和’sigmoid’中很重要。 probability 是否启用概率估计。允许在模型训练完成后使用predict_proba方法来预测每个类别的概率而不是仅仅给出类别的预测结果。必须在调用fit之前启用它并且会减慢该方法的速度。默认为False-按默认即可【选择rbf之后不起作用】 cache_size 核函数cache缓存大小默认为200MB-不用调整 class_weight 类别的权重字典形式传递。默认’balanced’-按默认设置 属性信息 support_vectors_ 【支持向量】 以数组的形式储存 n_support_ 【每个类别支持向量的个数】 int类型 coef_ 【参数w】 数组的形式储存 intercept_ 【偏置项参数b】 数组的形式储存 支持向量机实例1 实例要求从鸢尾花数据中对鸢尾花进行分类。 数据内容数据中共有100条样本数据6列其中第一列为编号数据最后一列为标签数据其余4列为特征数据。且前50行数据的标签为0后50行数据标签为1. 数据通过网盘分享的文件iris.csv 链接: https://pan.baidu.com/s/1ssc_VSVSUbkzz2-SOipV9w 提取码: jq54 实例步骤 读取数据可视化原始数据使用支持向量机训练可视化支持向量机结果 绘制分割线和间隔边界、支持向量 读取数据 import pandas as pd data pd.read_csv(rD:\where-python\python-venv\ji_qi_xue_xi_demo\朴素贝叶斯\iris.csv, headerNone) # headerNone 为没有表头可视化原始数据 import matplotlib.pyplot as plt# 选取数据的前 50 行 data1 data.iloc[:50, :] # 选取数据的 50 行之后的数据 data2 data.iloc[50:, :]# 原始数据是四维无法展示选择两个维度进行展示使用 scatter 函数绘制散点图 # 以数据 1 的第 1 列和第 3 列作为 x 和 y 轴标记为 号 plt.scatter(data1[1], data1[3], marker) # 以数据 2 的第 1 列和第 3 列作为 x 和 y 轴标记为 o 号 plt.scatter(data2[1], data2[3], markero) # 显示绘制的散点图 plt.show()使用支持向量机训练 from sklearn.svm import SVC# 选取数据的第 1 列和第 3 列作为特征 x x data.iloc[:, [1, 3]] # 选取数据的最后一列作为标签 y y data.iloc[:, -1] # 创建 SVC 分类器使用线性核C 为无穷大随机种子为 0 svm SVC(kernellinear, Cfloat(inf), random_state0) # 用选取的特征和标签训练 SVC 分类器 svm.fit(x, y)可视化支持向量机结果 # 获取训练好的分类器的系数 w svm.coef_[0] # 获取截距 b svm.intercept_[0]import numpy as np # 生成 0 到 7 之间的 300 个等间距的点 x1 np.linspace(0, 7, 300) # 计算分割超平面的直线方程w[0] * x1 w[1] * x2 b 0解出 x2 x2 -(w[0] * x1 b) / w[1] # 计算间隔边界直线方程w[0] * x1 w[1] * x2 b 1解出 x2 x3 (1 - (w[0] * x1 b)) / w[1] # 计算间隔边界直线方程w[0] * x1 w[1] * x2 b -1解出 x2 x4 (-1 - (w[0] * x1 b)) / w[1]# 绘制分割超平面线宽为 2颜色为红色 plt.plot(x1, x2, linewidth2, colorr) # 绘制间隔边界线宽为 1颜色为红色线条样式为虚线 plt.plot(x1, x3, linewidth1, colorr, linestyle--) plt.plot(x1, x4, linewidth1, colorr, linestyle--)# 设置 x 轴范围 plt.xlim(4, 7) # 设置 y 轴范围 plt.ylim(0, 5)# 获取支持向量 vets svm.support_vectors_ # 绘制支持向量颜色为蓝色标记为 x plt.scatter(vets[:, 0], vets[:, 1], cb, markerx)# 显示最终的图像 plt.show()本次实例可看出在二维中支持向量机的情况绘制分割线和支持向量的分布。 完整代码 import pandas as pd# 读取 csv 文件文件路径需要注意转义字符可使用原始字符串 data pd.read_csv(rD:\where-python\python-venv\ji_qi_xue_xi_demo\朴素贝叶斯\iris.csv, headerNone)import matplotlib.pyplot as plt# 选取数据的前 50 行 data1 data.iloc[:50, :] # 选取数据的 50 行之后的数据 data2 data.iloc[50:, :]# 原始数据是四维无法展示选择两个维度进行展示使用 scatter 函数绘制散点图 # 以数据 1 的第 1 列和第 3 列作为 x 和 y 轴标记为 号 plt.scatter(data1[1], data1[3], marker) # 以数据 2 的第 1 列和第 3 列作为 x 和 y 轴标记为 o 号 plt.scatter(data2[1], data2[3], markero) # 显示绘制的散点图 plt.show()from sklearn.svm import SVC# 选取数据的第 1 列和第 3 列作为特征 x x data.iloc[:, [1, 3]] # 选取数据的最后一列作为标签 y y data.iloc[:, -1] # 创建 SVC 分类器使用线性核C 为无穷大随机种子为 0 svm SVC(kernellinear, Cfloat(inf), random_state0) # 用选取的特征和标签训练 SVC 分类器 svm.fit(x, y)# 获取训练好的分类器的系数 w svm.coef_[0] # 获取截距 b svm.intercept_[0]import numpy as np # 生成 0 到 7 之间的 300 个等间距的点 x1 np.linspace(0, 7, 300) # 计算分割超平面的直线方程w[0] * x1 w[1] * x2 b 0解出 x2 x2 -(w[0] * x1 b) / w[1] # 计算间隔边界直线方程w[0] * x1 w[1] * x2 b 1解出 x2 x3 (1 - (w[0] * x1 b)) / w[1] # 计算间隔边界直线方程w[0] * x1 w[1] * x2 b -1解出 x2 x4 (-1 - (w[0] * x1 b)) / w[1]# 绘制分割超平面线宽为 2颜色为红色 plt.plot(x1, x2, linewidth2, colorr) # 绘制间隔边界线宽为 1颜色为红色线条样式为虚线 plt.plot(x1, x3, linewidth1, colorr, linestyle--) plt.plot(x1, x4, linewidth1, colorr, linestyle--)# 设置 x 轴范围 plt.xlim(4, 7) # 设置 y 轴范围 plt.ylim(0, 5)# 获取支持向量 vets svm.support_vectors_ # 绘制支持向量颜色为蓝色标记为 x plt.scatter(vets[:, 0], vets[:, 1], cb, markerx)# 显示最终的图像 plt.show()支持向量机实例2 对手写体图片进行识别。 共有2000个手写体数据上面是一张已经经过一些初步处理过的图片其中含有0~9的手写数字且每一个数字都是5行100列共有5000个数字。 本次通过对这张分辨率为20001000的图片进行切分。将其划分成独立的数字每个数字大小为2020像素共计5000个。 实例步骤 导入数据处理数据切分划分数据创建SVM模型训练数据测试数据得到分类报告及准确率 导入数据 import numpy as np import cv2 # 读取图像文件 shu_zi.png img cv2.imread(shu_zi.png)处理数据 # 将图像从 BGR 颜色空间转换为灰度空间 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 将灰度图像划分为 50 行每行再划分为 100 列生成一个二维列表 cells cells [np.hsplit(row, 100) for row in np.vsplit(gray, 50)] # 将二维列表转换为 numpy 数组 x np.array(cells)# 将数组重塑为 (-1, 400) 的形状并将数据类型转换为 float32 x x.reshape(-1, 400).astype(np.float32)# 创建一个从 0 到 9 的数组 k np.arange(10) # 将数组 k 中的元素重复 500 次生成标签数组 y y np.repeat(k, 500)切分划分数据 from sklearn.model_selection import train_test_split # 将数据 x 和标签 y 划分为训练集和测试集测试集占 20%设置随机种子为 0 x_train_w, x_test_w, y_train_w, y_test_w train_test_split(x, y, test_size0.2, random_state0)创建SVM模型 from sklearn.svm import SVC# 创建 SVC 分类器使用径向基核函数rbfC 为无穷大随机种子为 0 svm SVC(kernelrbf, Cfloat(inf), random_state0) 训练数据 # 使用训练集数据 x_train_w 和标签 y_train_w 训练 SVC 分类器 svm.fit(x_train_w, y_train_w)测试数据 自测 from sklearn import metrics # 使用训练好的分类器对训练集数据进行预测 train_pred svm.predict(x_train_w)测试集测试 # 使用训练好的分类器对测试集数据进行预测 test_pred svm.predict(x_test_w)得到分类报告及准确率 # 输出训练集的分类性能报告包括精确率、召回率、F1 分数等指标 print(metrics.classification_report(y_train_w, train_pred)) # 输出测试集的分类性能报告 print(metrics.classification_report(y_test_w, test_pred)) # 计算分类器在测试集上的准确率 m svm.score(x_test_w, y_test_w) # 打印手写数字用支持向量机的准确率 print(f手写数字用支持向量机的准确率为{m})完整代码 import numpy as np import cv2 # 导入 cv2 库用于图像处理导入 numpy 库用于数据处理 # 读取图像文件 shu_zi.png img cv2.imread(shu_zi.png) # 将读取的图像从 BGR 颜色空间转换为灰度颜色空间 gray cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 使用 np.vsplit 将灰度图像分割成 50 行对每一行使用 np.hsplit 分割成 100 列 # 将结果存储在 cells 列表中列表中的每个元素是分割后的图像块 cells [np.hsplit(row, 100) for row in np.vsplit(gray, 50)] # 将 cells 列表转换为 numpy 数组 x np.array(cells)# 将数组重塑为 (-1, 400) 的形状并将数据类型转换为 float32 # 目的是将数据处理为适合机器学习算法的格式 x x.reshape(-1, 400).astype(np.float32)# 创建一个包含 0 到 9 的数组 k np.arange(10) # 将数组 k 中的元素重复 500 次作为标签数据 y np.repeat(k, 500)from sklearn.model_selection import train_test_split # 将数据 x 和标签 y 按照 80:20 的比例划分为训练集和测试集 # random_state0 保证每次运行代码划分结果相同 x_train_w, x_test_w, y_train_w, y_test_w train_test_split(x, y, test_size0.2, random_state0)from sklearn.svm import SVC# 创建 SVC 分类器使用径向基核函数rbfC 为无穷大随机种子为 0 svm SVC(kernelrbf, Cfloat(inf), random_state0) # 使用训练集数据 x_train_w 和标签 y_train_w 训练 SVC 分类器 svm.fit(x_train_w, y_train_w)from sklearn import metrics # 使用训练好的分类器对训练集数据进行预测 train_pred svm.predict(x_train_w) # 输出训练集的分类性能报告包括精确率、召回率、F1 分数等指标 print(metrics.classification_report(y_train_w, train_pred))# 使用训练好的分类器对测试集数据进行预测 test_pred svm.predict(x_test_w) # 输出测试集的分类性能报告 print(metrics.classification_report(y_test_w, test_pred)) # 计算分类器在测试集上的准确率 m svm.score(x_test_w, y_test_w) # 打印手写数字用支持向量机的准确率 print(f手写数字用支持向量机的准确率为{m})与KNN算法准确率做对比 KNN完整代码 import numpy as np import cv2img cv2.imread(shu_zi.png) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) cells [np.hsplit(row,100) for row in np.vsplit(gray,50)] x np.array(cells)train x[:,:50] test x[:,50:100]# 将数据构造为符合KNN的输入将每个数字的尺寸由20*20调整为1*400 train_new train.reshape(-1,400).astype(np.float32) test_new test.reshape(-1,400).astype(np.float32)# 分配标签分别为训练数据、测试数据分配标签 k np.arange(10) labels np.repeat(k,250) train_labels labels[:,np.newaxis] # np.newaxis是numpy库中一个特殊对象用于增加一个新的维度 test_labels np.repeat(k,250)[:,np.newaxis]# # # 构建训练 knn cv2.ml.KNearest_create() # 通过cv2创建一个knn模型 knn.train(train_new,cv2.ml.ROW_SAMPLE,train_labels) ret,result,neighbours,distknn.findNearest(test_new,k3) # ret,result,neighbours,distknn.findNearest(a3,k3) # # ret表示查找操作是否成功 # # result浮点数数组表示测试样本的预测标签 # # neighbours这是一个整数数组表示与测试样本最近的k个索引。 # # dist这是一个浮点数组表示测试样本与每一个最近邻居之间的距离。 matches resulttest_labels correct np.count_nonzero(matches) accuracy correct*100.0/result.size print(当前使用KNN识别手写数字的准确率为:,accuracy)从支持向量机算法和KNN算法对比可看到支持向量机的准确率更高。
http://www.w-s-a.com/news/591645/

相关文章:

  • 网站备案需要什么流程怎么创建小程序卖东西
  • 陇西网站建设 室内设计持啊传媒企业推广
  • 连云港做网站制作首选公司如何让单位网站做防护
  • wordpress企业网站源码开发网站用什么工具做设计
  • 网站负责人不是法人seo神马网站推广器
  • 网站建设绩效考核方案wordpress支付宝付款
  • 高要区住房和城乡建设局网站如何网上注销自己的公司
  • 哪种技术做网站容易论文答辩图片做记录片的是哪个网站
  • 怎样在微信中做网站网站的备案号在哪
  • 返利淘网站怎么做wordpress htnl短代码
  • 网站 手机 appwordpress管理账户
  • 徐州网站建设 网站制作做招商网站的前景怎么样
  • 网站开发就业岗位鹧鸪哨网站1v1深度开发
  • 在线手机动画网站模板网站登录注册怎么做
  • 苏州品牌网站设计晋江论坛兔区是什么
  • 怎么利用代码做网站重庆网络营销网站建设销售
  • 用dw怎么做网站留言板百度举报网站
  • 成都微网站设计企业为什么要做网络营销推广
  • 双桥区网站制作企业网站一般内容包括哪些
  • 莆田外贸专业建站做app 需要先做网站吗
  • 网站怎么用北京口碑最好的装修公司
  • 潮州网站建设深圳微信分销网站设计
  • asp.net网站开发实例教程pdf泉州seo网站关键词优推广
  • 怎样建立一个企业网站dede 网站名称
  • 做网上竞彩网站合法吗免费网站建设品牌
  • 网站开发所需要的的环境客户关系管理的内涵
  • 优质做网站公司做软件的人叫什么
  • 徐州市徐州市城乡建设局网站首页网站建设刂金手指下拉十五
  • 建设游戏网站目的及其定位市场营销策略概念
  • 小学电教检查网站建设资料wordpress谷歌字体