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

什么是门户网站有哪些网络公司网站建设报价

什么是门户网站有哪些,网络公司网站建设报价,外贸系统软件有哪些,网站开发需求分析内容机器学习——支持向量机#xff08;SVM#xff09; 文章目录 前言一、SVM算法原理1.1. SVM介绍1.2. 核函数#xff08;Kernel#xff09;介绍1.3. 算法和核函数的选择1.4. 算法步骤1.5. 分类和回归的选择 二、代码实现#xff08;SVM#xff09;1. SVR#xff08;回归SVM 文章目录 前言一、SVM算法原理1.1. SVM介绍1.2. 核函数Kernel介绍1.3. 算法和核函数的选择1.4. 算法步骤1.5. 分类和回归的选择 二、代码实现SVM1. SVR回归2. 回归结果可视化3. SVC分类3. 分类结果可视化4. 非线性分类 总结 前言 支持向量机SVM是一种常见的机器学习方法常用于分类线性和非线性分类问题回归问题。本文将详细介绍一下支持向量机算法 一、SVM算法原理 1.1. SVM介绍 支持向量机Support Vector MachineSVM是一种常用的机器学习算法SVM可以用于线性和非线性分类问题回归以及异常值检测 其基本原理是通过在特征空间中找到一个超平面将不同类别的样本分开并且使得离超平面最近的样本点到超平面的距离最大化。 以一个二维平面为例判定边界是一个超平面在本图中其实是一条线但是可以将它想象为一个平面乃至更高维形式在二维平面的映射它是由支持向量所确定的支持向量是离判定边界最近的样本点它们决定了判定边界的位置。 间隔的正中就是判定边界间隔距离体现了两类数据的差异大小 若严格地规定所有的样本点都不在“缓冲区”都正确的在两边称为硬间隔分类 但是在一般情况下不易实现这里有两个问题 第一它只对线性可分的数据起作用。第二有异常值的干扰。 为了避免这些问题可使用软间隔分类 在保持“缓冲区”尽可能大和避免间隔违规之间找到一个良好的平衡在sklearn中的SVM类可以使用超参数 C(惩罚系数控制了模型的复杂度和容错能力。较小的C值会导致容错能力较高即更宽的缓冲区可能会产生更多的错误分类即间隔违规较大的C值会导致容错能力较低可能会产生更少的错误分类。 1.2. 核函数Kernel介绍 为什么要引入核函数呢 因为在SVM中有时候很难找出一条线或一个超平面来分割数据集这时候我们就需要升维把无法线性分割的样本映射到高纬度空间在高维空间实现分割 核函数是特征转换函数它可以将数据映射到高维特征空间中从而更好地处理非线性关系。 核函数的作用是通过计算两个样本之间的相似度内积来替代显式地进行特征映射从而避免了高维空间的计算开销。 在SVM中核函数的选择非常重要它决定了模型能够学习的函数空间。常见的核函数包括 线性核函数Linear Kernel最简单的核函数它在原始特征空间中直接计算内积适用于线性可分的情况。K(X,y) (X^T) * y 多项式核函数Polynomial Kernel通过多项式函数将数据映射到高维空间可以处理一定程度的非线性关系。(可拟合出复杂的分割超平面但可选参数太多阶数高后计算困难不稳定 K(X,y) ( (X^T) * y c ) ^ d , 其中 c 为常数d 为多项式的阶数。 高斯核函数Gaussian Kernel也称为径向基函数Radial Basis FunctionRBF通过高斯分布将数据映射到无穷维的特征空间可以处理更复杂的非线性关系。形式为 K(x,y) exp( -|| x-y || ^2 / (2 σ ^2) ) 。 || x - y || 表示向量 x 和 y 之间的欧氏距离即它们各个维度差值的平方和的平方根。 σ 是高斯核函数的参数控制了样本之间相似度的衰减速度。σ 越小样本之间的相似度下降得越快σ 越大样本之间的相似度下降得越慢。 sigmoid核函数Sigmoid Kernel通过sigmoid函数将数据映射到高维空间适用于二分类问题。 σ(x) 1 / (1 exp(-x)) 1.3. 算法和核函数的选择 假设特征数为N训练数据集的样本个数为W可按如下规则选择算法 若N相对W较大使用逻辑回归或线性核函数的SVM算法 若N较小W中等大小W为N的十倍左右可使用高斯核函数的SVM算法 若N较小W较大W为N的五十倍以上可以使用多项式核函数、高斯核函数的SVM算法 总之 数据大的问题选择复杂一些的模型反之选择简单模型。 有关逻辑回归算法的更多信息请看 机器学习——逻辑回归LR 1.4. 算法步骤 SVM算法可以分为以下几个步骤 数据预处理将数据集划分为训练集和测试集并进行特征缩放对数据进行标准化。 构建模型选择合适的核函数和惩罚系数构建SVM模型。 训练模型使用训练集对模型进行训练通过最大化间隔来找到最优的超平面。 预测使用训练好的模型对测试集进行预测。 1.5. 分类和回归的选择 通常情况下当标签值是离散型变量时我们将问题视为分类问题而当标签值是连续性变量时我们将问题视为回归问题。 在支持向量机SVM算法中SVC用于分类SVR用来做回归 在分类问题中我们的目标是将输入数据分为不同的离散类别。常见的分类算法包括逻辑回归、决策树、随机森林和支持向量机等。 在回归问题中我们的目标是预测连续性变量的值。回归问题涉及到对输入数据进行建模以预测一个或多个连续的输出变量。常见的回归算法包括线性回归、决策树回归、支持向量回归和神经网络等。 二、代码实现SVM 1. SVR回归 使用波士顿房价数据集其标签值是一个连续型变量故用SVR来做回归问题 波士顿房价数据集介绍 #加载波士顿房价数据集 from sklearn.datasets import load_boston boston load_boston() x boston.data y boston.target#数据的划分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(x,y,random_state42)#标准化 from sklearn import preprocessing scaler preprocessing.StandardScaler().fit(x_train) #保证train数据与test数据是在统一的距离标准下进行的标准化 x_train scaler.transform(x_train) x_test scaler.transform(x_test)#SVM构建 from sklearn.svm import SVR #使用多项式核函数 model SVR(kernel poly,degree 3 ,C5) model.fit(x_train,y_train) #检查得分 print(model.score(x_test,y_test)) # print(model.predict(x_test))#使用高斯核函数 model2 SVR(kernelrbf,gamma0.01,C5) # print(model2) model2.fit(x_train,y_train) print(model2.score(x_test,y_test))#使用sigmoid核函数 model SVR(kernel sigmoid,gamma0.01 ,C5) model.fit(x_train,y_train) #检查得分 print(model.score(x_test,y_test)) # print(model.predict(x_test))#使用网格搜索 import numpy as np from sklearn.model_selection import GridSearchCV params {kernel: [rbf,sigmoid,poly,linear],C: np.arange(1,6),gamma: np.arange(0,0.5,0.001),degree:np.arange(1,5) } grid_searchcv GridSearchCV(SVR(),param_grid params,cv 5) grid_searchcv.fit(x_train,y_train) print(grid_searchcv.best_params_) print(grid_searchcv.best_score_) #print(grid_searchcv.cv_results_) print(grid_searchcv.best_index_) print(grid_searchcv.best_estimator_) best_clf grid_searchcv.best_estimator_ best_clf.fit(x_train,y_train) print(best_clf.score(x_test,y_test))#结果 {C: 5, degree: 1, gamma: 0.058, kernel: rbf} 0.7854834638941114 24232 SVR(C5, degree1, gamma0.058) 0.7698971297133513 2. 回归结果可视化 from sklearn.svm import SVR best_clf SVR(kernel rbf,degree 1 ,C5,gamma0.058) best_clf.fit(x_train,y_train)import matplotlib.pyplot as plt # 使用最佳模型进行预测 y_pred best_clf.predict(x_test)# 绘制预测值与真实值之间的散点图 plt.scatter(y_test, y_pred) plt.plot([y_test.min(), y_test.max()], [y_pred.min(), y_pred.max()], k--, lw2) plt.xlabel(True Values) plt.ylabel(Predicted Values) plt.title(SVM Regression - True Values vs Predicted Values) plt.show()在图中如果点分布在对角线附近则表示预测值与真实值较为接近说明模型的回归效果较好。反之则不好 3. SVC分类 使用鸢尾花数据集因为其标签值为离散型变量故用SVC来做分类问题 #加载iris数据集 from sklearn.datasets import load_iris iris load_iris() x iris.data y iris.target#数据的划分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(x,y,random_state42)#标准化 from sklearn import preprocessing scaler preprocessing.StandardScaler().fit(x_train) #保证train数据与test数据是在统一的距离标准下进行的标准化 x_train scaler.transform(x_train) x_test scaler.transform(x_test)#使用网格搜索 from sklearn.svm import SVC import numpy as np from sklearn.model_selection import GridSearchCV params {kernel: [rbf,sigmoid,poly,linear],C: np.arange(1,6),gamma: np.arange(0,0.5,0.001),degree:np.arange(1,4) } grid_searchcv GridSearchCV(SVC(),param_grid params,cv 5) grid_searchcv.fit(x_train,y_train) print(grid_searchcv.best_params_) print(grid_searchcv.best_score_) print(grid_searchcv.best_index_) print(grid_searchcv.best_estimator_) best_clf grid_searchcv.best_estimator_ best_clf.fit(x_train,y_train) print(best_clf.score(x_test,y_test)) print(best_clf.predict(x_test))#结果 {C: 1, degree: 1, gamma: 0.133, kernel: poly} 0.9640316205533598 534 SVC(C1, degree1, gamma0.133, kernelpoly) 1.0 [1 0 2 1 1 0 1 2 1 1 2 0 0 0 0 1 2 1 1 2 0 2 0 2 2 2 2 2 0 0 0 0 1 0 0 2 10] 3. 分类结果可视化 因为鸢尾花数据集有四个特征所以为了方便可视化要将数据集进行降维 # 使用PCA进行降维 from sklearn.decomposition import PCA pca PCA(n_components2) x_pca pca.fit_transform(x) #数据的划分 from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test train_test_split(x_pca,y,random_state42)#标准化 from sklearn import preprocessing scaler preprocessing.StandardScaler().fit(x_train) #保证train数据与test数据是在统一的距离标准下进行的标准化 x_train scaler.transform(x_train) x_test scaler.transform(x_test)import numpy as np import matplotlib.pyplot as plt from sklearn.svm import SVC best_clf SVC(degree 1,C 1,gamma 0.133,kernelpoly) best_clf.fit(x_train,y_train) # 使用最佳模型进行预测 y_pred best_clf.predict(x_test)# 绘制散点图 sc plt.scatter(x_test[:, 0], x_test[:, 1], cy_pred) plt.xlabel(Principal Component 1) plt.ylabel(Principal Component 2) plt.title(SVM Classification - Predicted Classes) handles, labels sc.legend_elements() plt.legend(handles, labels) plt.show()# 绘制决策边界图 h 0.02 # 步长 x_min, x_max x_test[:, 0].min() - 1, x_test[:, 0].max() 1 y_min, y_max x_test[:, 1].min() - 1, x_test[:, 1].max() 1 xx, yy np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z best_clf.predict(np.c_[xx.ravel(), yy.ravel()]) Z Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha0.8) plt.scatter(x_test[:, 0], x_test[:, 1], cy_pred) plt.xlabel(Principal Component 1) plt.ylabel(Principal Component 2) plt.title(SVM Classification - Decision Boundary) plt.show() 4. 非线性分类 from sklearn.datasets import make_moons from sklearn.svm import SVC from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import matplotlib.pyplot as plt plt.style.use(ggplot) # 生成非线性分类数据 X, y make_moons(n_samples200, noise0.05,random_state41) X_train, X_test, y_train, y_test train_test_split(X, y, test_size0.2, random_state42)# 创建SVM模型并指定核函数 svm SVC(kernelrbf, random_state42) svm.fit(X_train, y_train) y_pred svm.predict(X_test)# 计算分类准确率 accuracy accuracy_score(y_test, y_pred) # print( accuracy)# 绘制分类结果 sc plt.scatter(X_test[:, 0], X_test[:, 1], cy_pred, cmapviridis) plt.xlabel(X1) plt.ylabel(X2) plt.title(Nonlinear Classification) handles,labels sc.legend_elements() plt.legend(handles,labels) plt.show() 绘制决策边界图 # 绘制决策边界图 def plot_juecebianjie(model, X, y):# 定义绘图边界x_min, x_max X[:, 0].min() - 1, X[:, 0].max() 1y_min, y_max X[:, 1].min() - 1, X[:, 1].max() 1h 0.02 # 步长# 生成网格点坐标矩阵xx, yy np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))# 使用模型进行预测Z model.predict(np.c_[xx.ravel(), yy.ravel()])Z Z.reshape(xx.shape)# 绘制等高线图plt.contourf(xx, yy, Z, cmapplt.cm.Spectral, alpha0.6)# 绘制数据点sc plt.scatter(X[:, 0], X[:, 1], cy, cmapplt.cm.Spectral)plt.xlabel(X1)plt.ylabel(X2)plt.title(Decision Boundary)handles,labels sc.legend_elements()plt.legend(handles,labels)plt.show()# 调用函数 plot_juecebianjie(svm, X_test, y_pred) 总结 本文在SVM算法原理介绍中从开始的SVM介绍到Kernel的介绍再到算法和核函数的选择之后就是算法的步骤以及分类和回归的选择在代码实现中亦是分别对SVM中的回归SVR)和分类SVC用代码实现并可视化结果。 关关雎鸠在河之洲 –2023-9-4 筑基篇
http://www.hkea.cn/news/14429999/

相关文章:

  • 淄博网站制作优化需要企业网站建设
  • 网站找哪家做较好做网站的公司叫什么软件
  • 深圳微商城网站制作联系电话网站更改备案信息吗
  • 珠海网站制作网络推广专业网站制作公司排行
  • 网站编辑没有经验可以做吗用illustrator做网站
  • 温州建设信息港网站成都企业网站备案流程
  • html怎么设置网站吗网站开发前台代码和后台代码
  • 企业网站报价方案模板大连提高网站排名
  • 网站模版怎样使用社交app开发
  • 网站渠道建设顺电网上商城app
  • 做网站做的网站建设教程哪家公司好
  • 大名网站建设电话网站建设方案编写人
  • 网站建设的简介wordpress自动排版
  • 怎么建立公司网站平台北京企业制作网站
  • 网站地图怎么做XML深圳坪山网站建设
  • 对伊利网站建设建议株洲seo优化高手
  • 怀化医保网站建一个网站模板网
  • php怎样做网站免费直播网站开发
  • 平昌县建设局网站包装设计公司商业模式
  • 投简历找工作哪个网站好个人电脑搭建成网站服务器
  • 吴江企业建设网站互联网广告优势
  • 自己做个网站需要些什么江门网站推广深圳公司
  • 肇庆网站建设松原网站建设哪家专业
  • 网站制作app开发室内设计网站图片
  • 深圳网站建设公司服务商做面包网站
  • 广州番禺区网站建设公益广告 公司网站建设中...
  • 类似设计师联盟的网站中国十大采购平台app
  • 合肥科技职业学院网站建设与管理dw简单的网页代码
  • 吉林省高等级公路建设局死人网站中国房地产信息网官网
  • 网站开发 评价平面艺术设计