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

有源码后怎么做网站百度收录率高的网站

有源码后怎么做网站,百度收录率高的网站,wordpress主题 排名,广东住房和城乡建设厅官网目录 一、介绍 (1)解释算法 (2)数据集解释 二、算法实现和代码介绍 1.超平面 2.分类判别模型 3.点到超平面的距离 4.margin 间隔 5.拉格朗日乘数法KKT不等式 (1)介绍 (2)对偶问题 (3)惩罚参数 (4)求解 6.核函数解决非线性问题 7.SMO (1)更新w (2)更新b 三、代…目录 一、介绍 (1)解释算法 (2)数据集解释 二、算法实现和代码介绍 1.超平面 2.分类判别模型 3.点到超平面的距离 4.margin 间隔 5.拉格朗日乘数法KKT不等式 (1)介绍 (2)对偶问题 (3)惩罚参数 (4)求解 6.核函数解决非线性问题 7.SMO (1)更新w (2)更新b 三、代码解释及其运行结果截图 (1)svm(拉格朗日、梯度、核函数) 2测试集预测 3画出超平面 四、实验中遇到的问题 五、svm的优缺点 优点 缺点  六、实验中还需要改进的地方 七、总代码展现 一、介绍 (1)解释算法 支持向量机Support Vector Machine, SVM是一类按监督学习supervised learning方式对数据进行二元分类的广义线性分类器generalized linear classifier其决策边界是对学习样本求解的最大边距超平面                                                                 ------------百度百科 本实验采取的数据集依旧是鸢尾花数据集实现的是二分类为了使得数据可以在坐标轴上展示出来实验中取的是鸢尾花数据集的setosa和versicolor类别。 支持向量机SVM的目标是找到一个能够将两类数据点分隔开的超平面使得两侧距离最近的数据点到超平面的距离最大。这些最靠近超平面的数据点被称为支持向量。 (2)数据集解释 data pd.read_csv(rC:\\Users\\李烨\\Desktop\\ljhg.txt, sep ) X_train data.iloc[:, :2].values y_train np.where(data.iloc[:, -1].values setosa, 1, -1)test_data pd.read_csv(C:\\Users\\李烨\\Desktop\\ljhgtest.txt, sep\s) X_test test_data[[Sepal.Length, Sepal.Width]].values 采用鸢尾花数据集为了可以在二维图上显示所以我截取了部分数据Sepal.Length, Sepal.Width两列来表示横纵坐标把setosa判断为正类1把versicolor判断为负类-1 二、算法实现和代码介绍 1.超平面 两侧距离最近的数据点到超平面的距离最大。超平面被用来划分特征空间以便实现对数据进行分类或回归。 在多分类实验中是n元空间中超平面就是一个n-1维的空间。 我们实现的是二分类就得到的是一条直线。 给定样本数据集假设样本特征为X样本标签为y。其中y 的取值只能有1和-1。表示样本正类和负类。 公式 其中w代表每个特征前的系数也就是超平面的法向量 2.分类判别模型 公式 当f(w)0时判定为正类否则判别为负类。 3.点到超平面的距离 得到样本点到超平面距离的公式 在二维空间里面也就是两个特征中我们可以把超平面也就是直线的公式写成。 将一个点代入这个点可能在直线的上方直线上和直线的下方。那么对于分类为正类1和负类-1我们可以得到新的公式: 其中 4.margin 间隔 从网上找了张图便于理解 支持向量:在支持向量机中起关键作用的训练数据点。在SVM中超平面由这些支持向量确定它们是离分隔超平面最近的那些点。 图中l1和l3直线的确定就是按照支持向量来确定的查找正类和负类中距离超平面最近的点找到超平面使得这个间隔最大以此来确定超平面。 wb都是未知参数所以我们就将l1和l3等比例缩放 最后得到 那么这两条直线到超平面的距离就可以表示为 那我们就可以得到预测为正类的公式 负类的公式 合并后得到 我们确定超平面是为了分隔两个类别所以需要找到超平面到支持向量的最大距离也就是margin间隔。也就是求两条直线到超平面距离的最大值d也就是求||w||的最大值为了方便计算也就是求的的最大值。 5.拉格朗日乘数法KKT不等式 (1)介绍 拉格朗日乘数法的主要是将有等式约束条件优化问题转换为无约束条件,求解带约束条件下的极值。因为拉格朗日是求解等式约束条件而要求解带不等式约束条件下的求解所以引入KKT不等式约束。 对于 求解 我们可以考虑加入alpha使得,这样就可以了利用拉格朗日乘数法得到 拉格朗日得到,求解该式子对应的极值。 对该式子求导得到 为了求解f(x)在s.t条件下的极值我们先求得不在约束条件下的极值p然后在约束条件下查找合适的x使得他尽可能的靠近极值点也就是说alpha就没影响等式。那么就把问题转化为 (2)对偶问题 对于求解等效于 求解 当然这样交换是假设成立。情况分为强对偶和弱对偶 如果是弱对偶因为是先求解最小值的x就会使得求最大值是在小中选择较大的那么。而如果等价的话那么就是该交换成立。特别的是在本实验中下凸满足Slater条件所以对于所有下凸函数都是满足强对偶性。 (3)惩罚参数 惩罚参数C控制了分类器对错误分类样本的容忍程度。较大的C值会导致分类器试图尽量减少误分类样本的数量这可能会导致模型在训练数据上表现得更好但也可能导致过拟合的风险增加而较小的C值则对误分类样本的惩罚较小允许一些样本被错分从而使得决策边界更加平滑减少了过拟合的风险。 我们可以预料到数据中肯定存在一些点会影响到超平面的选择从而造成超平面的分类效果不理想这时候就引入惩罚参数当该点的误差超过一定界限的对其惩罚较大就减少该样本点造成的误差。 (4)求解 最后求解极值就是用到和之前逻辑回归算法一样的梯度上升和梯度下降算法这里就不多做介绍。  6.核函数解决非线性问题 用升维的方法来解决线性不可分的问题。 假设原始特征为x1,x2,x3那么将这三个特征两两组合的得到 在训练模型的适合将这些参与到训练模型中。 对于两个数据m和n将m和n内积然后平方得到 公式 这个公式是多项式核函数当时他的完整公式是 核函数有线性核函数、多项式核函数、高斯核函数等。 def polynomial_kernel(X, Y, degree2):return (np.dot(X, Y.T) ) ** degree 7.SMO 在SMO算法中需要解决的优化问题是一个凸二次规划问题其目标是最小化关于拉格朗日乘子alpha的二次函数同时满足一些约束条件例如 KKT 条件。通过构建拉格朗日函数然后应用SMO算法来迭代优化最终得到最优的 alpha 和 b (1)更新w 选择两个样本i和j来进行更新更新步长的计算与核函数的值以及拉格朗日乘子都有关系。 公式 这个步长有正有负。当为正数的时候意味着在更新拉格朗日乘子时朝着梯度方向移动一个较小的步长。为负数则可能表示算法中的错误需要检查和调整。 (2)更新b 当时 bb1; 当时bb2; 否则 当然a和b的更新这边学习的仅仅只是其中的一种。 三、代码解释及其运行结果截图 (1)svm(拉格朗日、梯度、核函数) def svm_fit(X, y, C, kernel, degree2, alpha0.001, num1000):n_samples, n_features X.shapew np.zeros(n_samples)b 0kernel_matrix kernel(X, X, degree)for _ in range(num):for idx, x_i in enumerate(X):E_i np.sum(w * y * kernel_matrix[idx]) b - y[idx]if ((y[idx] * E_i -alpha and w[idx] C) or (y[idx] * E_i alpha and w[idx] 0)):j np.random.choice(np.delete(np.arange(n_samples), idx))E_j np.sum(w * y * kernel_matrix[j]) b - y[j]w_i_old, w_j_old w[idx], w[j]if (y[idx] ! y[j]):L max(0, w[j] - w[idx])H min(C, C w[j] - w[idx])else:L max(0, w[idx] w[j] - C)H min(C, w[idx] w[j])if L H:continueeta 2 * kernel_matrix[idx, j] - kernel_matrix[idx, idx] - kernel_matrix[j, j]if eta 0:continuew[j] w[j] - (y[j] * (E_i - E_j)) / etaw[j] max(L, min(H, w[j]))if abs(w[j] - w_j_old) 1e-5:continuew[idx] w[idx] y[idx] * y[j] * (w_j_old - w[j])b1 b - E_i - y[idx] * (w[idx] - w_i_old) * kernel_matrix[idx, idx] - y[j] * (w[j] - w_j_old) * kernel_matrix[idx, j]b2 b - E_j - y[idx] * (w[idx] - w_i_old) * kernel_matrix[idx, j] - y[j] * (w[j] - w_j_old) * kernel_matrix[j, j]if 0 w[idx] C:b b1elif 0 w[j] C:b b2else:b (b1 b2) / 2return w, b C是惩罚参数, kernel是代表的核函数, degree是核函数的阶数, alpha是梯度的步长, num是迭代次数。用E_i来表示的是第i个样本的预测误差也就是样本的核函数对应的数据到超平面的距离减去该样本的分类之和。if ((y[idx] * E_i -alpha and w[idx] C) or (y[idx] * E_i alpha and w[idx] 0))是来判断这个是否要更新参数如果误差太大那么就说明w[idx]的值不合适就需要更新他。先从数据中再次随机选取一个数据判断y[idx] ! y[j]对w[j]进行约束在一定范围内使得在满足约束条件的同时能够使得目标函数在更新后有下降较快可以更节省时间。如果约束到一个点上面就无法继续优化了如果没有二阶导数判断一下更新的方向。if eta 0说明图像是下凸的跳过再次更新为负数就需要进行整改。对w进行更新但是w应该在一定范围内。如果w[j]的改变量很小就认为他对w[idx]的更新没有贡献跳过。根据smo更新b的方式对b进行更新。 2测试集预测 def predict(w, b, X_train, y_train, X_test, kernel, degree2):predictions []for x in X_test:prediction bfor i, x_i in enumerate(X_train):prediction w[i] * y_train[i] * kernel(x_i, x, degree)predictions.append(np.sign(prediction))return predictions 对于测试集中的数据将他们与训练集中的数据核函数再根据得到的值为正数和负数分类到正类和负类。 运行结果 可以看到对于二分类的结果还是较为准确的。 3画出超平面 def plot_decision_boundary(X, y, w, b, kernel, degree2):x1_min, x1_max X[:, 0].min() - 1, X[:, 0].max() 1x2_min, x2_max X[:, 1].min() - 1, X[:, 1].max() 1xx1, xx2 np.meshgrid(np.arange(x1_min, x1_max, 0.1), np.arange(x2_min, x2_max, 0.1))Z predict(w, b, X, y, np.c_[xx1.ravel(), xx2.ravel()], kernel, degree)Z np.array(Z).reshape(xx1.shape)plt.contourf(xx1, xx2, Z, alpha0.4)plt.scatter(X[:, 0], X[:, 1], cy, markero, edgecolorsk) 因为超平面中用到了核函数所以超平面的公式就和样本数量有关得到的公式就不再是可以像逻辑回归一样直接表示出来需要最坐标轴上面的点用核函数表示 代入到公式中得到预测值。 这个代码是参考了网上的代码以坐标轴的形式把坐标轴上的点用核函数的公式拿去预测那么他就得到了整张坐标轴上的分类。超平面就是两个分类交叉的地方。 运行结果 四、实验中遇到的问题 实验中遇到的最主要的问题就是对w和b的更新上因为和逻辑回归一点像就没有真正理解算法对w和b的选取和更新是都花了较大的时间来理解SMO的算法SMO算法有许多给定的公式来更新w和b核函数和拉格朗日乘子法KKT不等式等都是利用公式求解公式较多较为复杂重点就在对这些公式的掌握和理解上面。实验中的另一个问题就是对于惩罚参数的选取上由于刚开始看到的并没有添加惩罚参数所以导致超平面受到的影响较大受到个别点的影响导致拟合效果非常不好而且由于是利用梯度求解所以就会导致超平面因为拟合效果不好。如图。超平面并不能很好的划分。 3.超平面的画法上面最开始是想直接将点表示出来但是发现用核函数得到的超平面公式与样本点的数量有关系在画超平面的时候仍然需要对他进行核函数求解所以在预测的时候加上核函数就可以了。 五、svm的优缺点 优点 逻辑回归主要是处理线性问题与之相比支持向量机可以处理许多非线性的问题SVM 找到最大间隔超平面这意味着它试图最大化类别之间的间隔拟合效果会更好。在高维空间中svm支持向量机的适应效果回归更好。 缺点  支持向量机svm的优化问题通常是凸优化问题它的计算复杂度随着样本数量和特征维度的增加而增加。在处理大规模数据和高维数据时训练时间和内存时间复杂度很大。 六、实验中还需要改进的地方 与逻辑回归一样使用的是普通梯度而随机梯度上升在每次迭代中只需要计算一个样本数据的梯度因此通常比梯度上升更快。我们可以利用随机梯度来减小时间复杂度。由于对SMO算法的不熟悉所以我的实验中用到的是最简单的SMO复杂度高程序预测效果没那么好使用更加完整成熟的SMO算法可以有效改进拟合效果。 七、总代码展现 import numpy as np import pandas as pd import matplotlib.pyplot as plt def polynomial_kernel(X, Y, degree2):return (np.dot(X, Y.T) ) ** degree def svm_fit(X, y, C, kernel, degree2, alpha0.001, num1000):n_samples, n_features X.shapew np.zeros(n_samples)b 0kernel_matrix kernel(X, X, degree)for _ in range(num):for idx, x_i in enumerate(X):E_i np.sum(w * y * kernel_matrix[idx]) b - y[idx]if ((y[idx] * E_i -alpha and w[idx] C) or (y[idx] * E_i alpha and w[idx] 0)):j np.random.choice(np.delete(np.arange(n_samples), idx))E_j np.sum(w * y * kernel_matrix[j]) b - y[j]w_i_old, w_j_old w[idx], w[j]if (y[idx] ! y[j]):L max(0, w[j] - w[idx])H min(C, C w[j] - w[idx])else:L max(0, w[idx] w[j] - C)H min(C, w[idx] w[j])if L H:continueeta 2 * kernel_matrix[idx, j] - kernel_matrix[idx, idx] - kernel_matrix[j, j]if eta 0:continuew[j] w[j] - (y[j] * (E_i - E_j)) / etaw[j] max(L, min(H, w[j]))if abs(w[j] - w_j_old) 1e-5:continuew[idx] w[idx] y[idx] * y[j] * (w_j_old - w[j])b1 b - E_i - y[idx] * (w[idx] - w_i_old) * kernel_matrix[idx, idx] - y[j] * (w[j] - w_j_old) * kernel_matrix[idx, j]b2 b - E_j - y[idx] * (w[idx] - w_i_old) * kernel_matrix[idx, j] - y[j] * (w[j] - w_j_old) * kernel_matrix[j, j]if 0 w[idx] C:b b1elif 0 w[j] C:b b2else:b (b1 b2) / 2return w, bdef predict(w, b, X_train, y_train, X_test, kernel, degree2):predictions []for x in X_test:prediction bfor i, x_i in enumerate(X_train):prediction w[i] * y_train[i] * kernel(x_i, x, degree)predictions.append(np.sign(prediction))return predictionsdef plot_decision_boundary(X, y, w, b, kernel, degree2):x1_min, x1_max X[:, 0].min() - 1, X[:, 0].max() 1x2_min, x2_max X[:, 1].min() - 1, X[:, 1].max() 1xx1, xx2 np.meshgrid(np.arange(x1_min, x1_max, 0.1), np.arange(x2_min, x2_max, 0.1))Z predict(w, b, X, y, np.c_[xx1.ravel(), xx2.ravel()], kernel, degree)Z np.array(Z).reshape(xx1.shape)plt.contourf(xx1, xx2, Z, alpha0.4)plt.scatter(X[:, 0], X[:, 1], cy, markero, edgecolorsk)data pd.read_csv(rC:\\Users\\李烨\\Desktop\\ljhg.txt, sep ) X_train data.iloc[:, :2].values y_train np.where(data.iloc[:, -1].values setosa, 1, -1)test_data pd.read_csv(C:\\Users\\李烨\\Desktop\\ljhgtest.txt, sep\s) X_test test_data[[Sepal.Length, Sepal.Width]].values y_test test_data[[Species]].values;C 1.0 degree 2 tol 0.001 max_iter 1000w, b svm_fit(X_train, y_train, C, polynomial_kernel, degree, tol, max_iter)predictions predict(w, b, X_train, y_train, X_test, polynomial_kernel, degree)cnt0.0 for i, prediction in enumerate(predictions):if prediction 1:anssetosaelse :ansversicolorprint(f第{i}个数据{X_test[i]}预测结果为{ans}实际结果为{y_test[i]})if ansy_test[i]:cnt1print(f准确率为{cnt/len(predictions)})plt.rcParams[font.sans-serif] [SimHei] plt.figure(figsize(10, 6)) plot_decision_boundary(X_train, y_train, w, b, polynomial_kernel, degree) plt.title(SVM支持向量机) plt.xlabel(Sepal Length) plt.ylabel(Sepal Width) plt.show()
http://www.hkea.cn/news/14406835/

相关文章:

  • 莘县网站建设返回链接 网站惩罚检查 错误检查
  • 自己网站做问卷调查网站定制公司哪家最权威
  • 网站建设视频讲解网站域名过期不续费
  • 互联网电商网站建设长沙官网优化推广
  • 湖北省建设厅网站证件网络营销有哪些方面
  • 快速网站排名logo设计在线生成免费免费
  • 晋州住房保障建设局网站wordpress用户集成
  • 网站制作成功后怎么使用标签云小工具 wordpress nofollow
  • 威海专业做网站公司如何作wordpress 主题
  • 郑州企业建网站制作网站判断手机跳转代码
  • 网站的手机客户端怎样做太月星网站建设程序开发
  • 怎么查看网站解析西大路网站建设公司
  • 建企业网站一般需要多少钱沧州好的做网站的公司
  • 有没有好网站推荐小米手机官方网站
  • php网站开发模式有哪些WordPress添加作者信息小工具
  • 做网站与网页有什么区别wordpress的站 做固定链接301重定向对百度的影响
  • 新化网站建设成都推广网站多少钱
  • wordpress如何建站公司网站空间
  • 中国行业网站做网站企业经营范围
  • 有哪些软件可以查企业信息石家庄高级seo经理
  • 网站姐姐做床戏网站塔城网站seo
  • 硅塑胶 东莞网站建设wordpress排序
  • 贵州安顺住房城乡建设网站公司网站模板设计
  • 免费的源码网站有哪些全国质量建设局特种作业网站
  • 网站在哪里变更备案信息网店推广方式怎么写
  • ssh框架做的网站问题网站运营和seo的区别
  • 仿站网站开发苏州设计公司排行榜
  • 网站没有icp备案国家企业信用信息公示系统官网一
  • 怎样建设网站施工化工厂建设网站
  • python网站开发环境河南十大建筑公司排名