-
Tensorflow使用支持向量机拟合线性回归
2020-09-20 03:04:54主要为大家详细介绍了Tensorflow使用支持向量机拟合线性回归,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
Tensorflow用支持向量机来拟合线性回归
2018-02-27 17:21:51支持向量机可以用来拟合线性回归。 相同的最大间隔(maximum margin)的概念应用到线性回归拟合。代替最大化分割两类目标是,最大化分割包含大部分的数据点(x,y)。我们将用相同的iris数据集,展示用刚才的概念来...支持向量机可以用来拟合线性回归。
相同的最大间隔(maximum margin)的概念应用到线性回归拟合。代替最大化分割两类目标是,最大化分割包含大部分的数据点(x,y)。我们将用相同的iris数据集,展示用刚才的概念来进行花萼长度与花瓣宽度之间的线性拟合。相关的损失函数类似于max(0,|yi-(Axi+b)|-ε)。ε这里,是间隔宽度的一半,这意味着如果一个数据点在该区域,则损失等于0。
# SVM Regression #---------------------------------- # # This function shows how to use TensorFlow to # solve support vector regression. We are going # to find the line that has the maximum margin # which INCLUDES as many points as possible # # We will use the iris data, specifically: # y = Sepal Length # x = Pedal Width import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from sklearn import datasets from tensorflow.python.framework import ops ops.reset_default_graph() # Create graph sess = tf.Session() # Load the data # iris.data = [(Sepal Length, Sepal Width, Petal Length, Petal Width)] iris = datasets.load_iris() x_vals = np.array([x[3] for x in iris.data]) y_vals = np.array([y[0] for y in iris.data]) # Split data into train/test sets train_indices = np.random.choice(len(x_vals), round(len(x_vals)*0.8), replace=False) test_indices = np.array(list(set(range(len(x_vals))) - set(train_indices))) x_vals_train = x_vals[train_indices] x_vals_test = x_vals[test_indices] y_vals_train = y_vals[train_indices] y_vals_test = y_vals[test_indices] # Declare batch size batch_size = 50 # Initialize placeholders x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32) y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32) # Create variables for linear regression A = tf.Variable(tf.random_normal(shape=[1,1])) b = tf.Variable(tf.random_normal(shape=[1,1])) # Declare model operations model_output = tf.add(tf.matmul(x_data, A), b) # Declare loss function # = max(0, abs(target - predicted) + epsilon) # 1/2 margin width parameter = epsilon epsilon = tf.constant([0.5]) # Margin term in loss loss = tf.reduce_mean(tf.maximum(0., tf.subtract(tf.abs(tf.subtract(model_output, y_target)), epsilon))) # Declare optimizer my_opt = tf.train.GradientDescentOptimizer(0.075) train_step = my_opt.minimize(loss) # Initialize variables init = tf.global_variables_initializer() sess.run(init) # Training loop train_loss = [] test_loss = [] for i in range(200): rand_index = np.random.choice(len(x_vals_train), size=batch_size) rand_x = np.transpose([x_vals_train[rand_index]]) rand_y = np.transpose([y_vals_train[rand_index]]) sess.run(train_step, feed_dict={x_data: rand_x, y_target: rand_y}) temp_train_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_train]), y_target: np.transpose([y_vals_train])}) train_loss.append(temp_train_loss) temp_test_loss = sess.run(loss, feed_dict={x_data: np.transpose([x_vals_test]), y_target: np.transpose([y_vals_test])}) test_loss.append(temp_test_loss) if (i+1)%50==0: print('-----------') print('Generation: ' + str(i+1)) print('A = ' + str(sess.run(A)) + ' b = ' + str(sess.run(b))) print('Train Loss = ' + str(temp_train_loss)) print('Test Loss = ' + str(temp_test_loss)) # Extract Coefficients [[slope]] = sess.run(A) [[y_intercept]] = sess.run(b) [width] = sess.run(epsilon) # Get best fit line best_fit = [] best_fit_upper = [] best_fit_lower = [] for i in x_vals: best_fit.append(slope*i+y_intercept) best_fit_upper.append(slope*i+y_intercept+width) best_fit_lower.append(slope*i+y_intercept-width) # Plot fit with data plt.plot(x_vals, y_vals, 'o', label='Data Points') plt.plot(x_vals, best_fit, 'r-', label='SVM Regression Line', linewidth=3) plt.plot(x_vals, best_fit_upper, 'r--', linewidth=2) plt.plot(x_vals, best_fit_lower, 'r--', linewidth=2) plt.ylim([0, 10]) plt.legend(loc='lower right') plt.title('Sepal Length vs Pedal Width') plt.xlabel('Pedal Width') plt.ylabel('Sepal Length') plt.show() # Plot loss over time plt.plot(train_loss, 'k-', label='Train Set Loss') plt.plot(test_loss, 'r--', label='Test Set Loss') plt.title('L2 Loss per Generation') plt.xlabel('Generation') plt.ylabel('L2 Loss') plt.legend(loc='upper right') plt.show()
输出结果:
----------- Generation: 50 A = [[ 2.91328382]] b = [[ 1.18453276]] Train Loss = 1.17104 Test Loss = 1.1143 ----------- Generation: 100 A = [[ 2.42788291]] b = [[ 2.3755331]] Train Loss = 0.703519 Test Loss = 0.715295 ----------- Generation: 150 A = [[ 1.84078252]] b = [[ 3.40453291]] Train Loss = 0.338596 Test Loss = 0.365562 ----------- Generation: 200 A = [[ 1.35343242]] b = [[ 4.14853334]] Train Loss = 0.125198 Test Loss = 0.16121
基于iris数据集(花萼长度和花瓣宽度)的支持向量机回归,间隔宽度为0.5
每次迭代的支持向量机回归的损失值(训练集和测试集)直观地讲,我们认为SVM回归算法试图把更多的数据点拟合到直线两边2ε宽度的间隔内。这时拟合的直线对于ε参数更有意义。如果选择太小的ε值,SVM回归算法在间隔宽度内不能拟合更多的数据点;如果选择太大的ε值,将有许多条直线能够在间隔宽度内拟合所有的数据点。作者更倾向于选取更小的ε值,因为在间隔宽度附近的数据点比远处的数据点贡献更少的损失。
-
支持向量机的回归拟合
2014-12-03 13:27:26支持向量机回归预测代码,亲测可用的代码 -
创建矩阵、向量;散点拟合
2016-10-16 23:17:08一、创建向量 1、a=[1,2,3] 2、a=1:k:9 k为步长 3、a=linspace(1,10,k) k为向量中元素的个数 二、创建矩阵 1、a=[1,2,3;4,5,6] 2、a=reshape(1:12,3,[]) 3表示矩阵为3行 3、ones(3,4) 创建3行4列...一、创建向量
1、a=[1,2,3]
2、a=1:k:9 k为步长
3、a=linspace(1,10,k) k为向量中元素的个数
二、创建矩阵
1、a=[1,2,3;4,5,6]
2、a=reshape(1:12,3,[]) 3表示矩阵为3行3、ones(3,4) 创建3行4列矩阵 randi(10,[5,4]) 创建5行4列 元素范围在1~10的矩阵
三、拟合一组散点
x=[2954.9,7866.9,5272.0]; y=[3281.5,8683.7,5354.6]; xi=1:1:8000; p=polyfit(x,y,1)% 1表示1次拟合 yi=polyval(p,xi); plot(x,y,'o',xi,yi)
-
过拟合 特征值 特征向量
2019-11-06 17:45:46过拟合,欠拟合 一.什么是过拟合,欠拟合 1.过拟合:对训练集特征的过度学习,仅仅适合此训练集,在泛化使用的时候不能用于其他的数据集判断. 2.欠拟合:对于训练集特征学习的欠缺,同样不适用于其他数据集的判断 . 用一个...过拟合,欠拟合
一.什么是过拟合,欠拟合
1.过拟合:对训练集特征的过度学习,仅仅适合此训练集,在泛化使用的时候不能用于其他的数据集判断.
2.欠拟合:对于训练集特征学习的欠缺,同样不适用于其他数据集的判断
.用一个表格来解释过拟合,欠拟合
训练集上的表现 测试集上的表现 结论 不好 不好 欠拟合 好 不好 过拟合 好 好 适度拟合 二.过拟合的产生
-
训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;
-
训练集和测试集特征分布不一致;
-
样本中的噪音数据干扰过大,大到模型过分记住了噪音特征,导致多余的记录;
-
权值学习迭代次数足够多(Overtraining),拟合了训练数据中的噪声和训练样例中没有代表性的特征。
总结来说主要原因在于:1训练数据中存在噪音 2.训练集太少
三.处理过拟合
1.丢弃一些不能帮助正确预测的特征,减小模型的复杂度(减小宽度和减小深度)
2.增加训练集的数量,减少过度学习的概率
3.正则化,保留所有的特征,减少参数的大小,或则使用一些模型选择的算法
正则化的两种方式
1.L1正则化(稀疏规则算子)
2.L2正则化(岭回归)(权值衰减)
范数的定义
L0范数指向量中非零元素的个数
L1范数:向量中每个元素绝对值的和
L2范数:向量元素绝对值的平方和再开平方L1和L2的区别
1.L1是模型的各个参数的绝对值之和
2.L2是模型各个参数的平方和的开方值
3.L1会趋向于产量少量的特征,而其他的特征都是0,因为最优的参数值很大概率会出现在坐标轴上,导致某一维的权重为0,产生稀疏权重矩阵.
4.L2会选择更多的特征,这些特征都会接近于0,最优的参数值很小概率出现在坐标轴上,因此每一维都不会是0,最小化||W||时,就会使每一次趋近于0.总体上来说,运用的最多的是L1正则方法,因为其方法容易理解.其次是L2正则方法,它使得目标函数变为凸函数,梯度下降法和L-BFGS都能收敛到全局最优解。
特征值和特征向量
特征向量:设A为n阶实方阵,如果存在某个数m及某个n维非零列向量x,使得 Ax=mx,则称是方阵A的一个特征值,是方阵A的属于特征值的一个特征向量。
特征值:设 A 是n阶方阵,如果存在数m和非零n维列向量 x,使得 Ax=mx 成立,则称 m 是A的一个特征值
总结:
特征值主要使特征向量进行矩阵变换
特征向量A(2,2)
特征值m(1,3)
Am(2,6)
-
-
支持向量机的回归拟合 预测
2013-04-15 20:59:07利用最小二乘支持做向量机回归预测分析,示例代码。 -
基于局部平面拟合求点云法向量
2018-03-17 11:09:04基于局部平面拟合求点云法向量,是我看到过的比较容易懂的,算法推导也写得很清楚 -
点云法向量与点云平面拟合的关系(PCA)
2019-05-22 10:04:24点云法向量估计的主要思路是对K-近邻的N个点进行平面拟合(平面过N点重心),平面法向量即为所求;所以求法向量就是变相的求拟合平面。 下面我们用最小二乘法求k近邻点云的拟合平面: 当 ||x||=1时,Ax=0的最小...点云法向量估计的主要思路是对K-近邻的N个点进行平面拟合(平面过N点重心),平面法向量即为所求;所以求法向量就是变相的求拟合平面。
下面我们用最小二乘法求k近邻点云的拟合平面:
当 ||x||=1时,Ax=0的最小二乘解是ATA的最小特征值对应的特征向量等同于:ATA的最小特征值所对应的特征向量可使||Ax||最小。
结论:假设k-近邻点矩阵B,B为k*3的矩阵,则根据B拟合平面的法向量就是BTB对应的最小特征向量;
同理我们可以得出BTB对应的最大特征向量就是拟合平面的方向向量。(这里的前提是:B已经去中心化)
实际上,求一组点的拟合平面的过程,就是求其PCA的过程。因为PCA也是可以通过最小化投影距离推导出来的。即样本点到这个超平面的距离足够近。
PCA的推导:基于最小投影距离
重建:
上式中的x'其实表示原样本点在新的基下的拉伸程度系数,我们把拉伸系数再乘上对应的基向量(在原坐标系下的方向向量),就相当于求出投影后的样本点在原坐标系下的坐标。以三维坐标为例,将点P(x,y,z)投影到一个平面内,变成二维坐标M(x',y'),平面使用2个基向量(基向量是3维)表示,(x',y')再与2个基向量相乘求和,就得到点M在原三维空间的坐标。
即样本点到这个超平面的距离足够近。
-
四种支持向量机用于函数拟合与模式识别的Matlab示例程序-用于函数拟合与模式识别的Matlab示例程序.rar
2019-08-13 01:05:35四种支持向量机用于函数拟合与模式识别的Matlab示例程序-用于函数拟合与模式识别的Matlab示例程序.rar 用于函数拟合与模式识别的Matlab示例程序.rar 四种支持向量机用于函数拟合与模式识别的... -
支持向量机的回归拟合——混凝土抗压强度预测
2018-07-13 16:28:59支持向量机的回归拟合——混凝土抗压强度预测的Matlab程序代码 本资源仅供学习交流,侵删 -
chapter29 支持向量机的回归拟合——混凝土抗压强度预测
2018-03-20 10:46:58chapter29 支持向量机的回归拟合——混凝土抗压强度预测 -
3D点云法向量估计(最小二乘拟合平面)
2018-11-22 20:58:001、点云法向量估计的主要思路是对K-近邻的N个点进行平面拟合(平面过N点重心),平面法向量即为所求; 2、最小二乘拟合可以转换为求协方差矩阵最小特征值对应的特征向量(SVD分解);此种解法对数据噪声有很强的... -
支持向量机使用径向基核函数实现函数拟合
2019-07-08 10:09:43神经网络仿真作业,设计支持向量机实现一对数组的函数拟合P=-1:0.1:1T=[-0.96 -0.577 ..... .....]使用支持向量机相应的回归函数svr, svrplot , svroutput进行函数拟合的仿真实验中采用rbf核函数,惩罚因子取100... -
四种支持向量机用于函数拟合与模式识别的Matlab示例程序
2010-01-05 13:52:39四种支持向量机用于函数拟合与模式识别的Matlab示例程序 -
svm支持向量机_机器学习之支持向量机SVM的策略和过拟合问题
2020-12-10 05:51:10支持向量机的三要素:模型:分离超平面 w*x+b=0 和决策函数 f(x)=sign(w*x+b)策略:结构风险最小化,具体对于SVM是间隔最大化算法:凸二次规划对于支持向量机的模型和算法,都比较好理解,那它的策略间隔最大化,为... -
最小二乘法平面方程拟合计算, 点云法向量估算
2015-11-25 17:22:03利用最小二乘法求解点云/点集/多点的拟合平面,求解点云的法向量。 -
pytorch l2正则化_特征值与特征向量,过拟合,L1与L2正则化
2020-12-05 11:22:51特征值与特征向量特征值的基本定义:设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。A的所有特征值的全体,叫做A的谱,记为λ(A)使用特征值求特征向量... -
支持向量机的回归拟合-混凝土抗压强度预测
2018-08-13 21:14:12代码解释的详细,可以直接用,已经测试过了,很好用。 -
支持向量机SVM的策略和过拟合问题
2018-09-01 10:59:44支持向量机的三要素: 模型:分离超平面 w*x+b=0 和决策函数 f(x)=sign(w*x+b) 策略:结构风险最小化,具体对于SVM是间隔最大化 算法:凸二次规划 对于支持向量机的模型和算法,都比较好理解,那它的策略间隔... -
过拟合,正则化,特征值,特征向量一些知识点
2019-11-06 17:30:50特征值,特征向量 1.公式 2.具体解释 一.过拟合 1. 概念 过拟合是指为了得到一致假设而使假设变得过度严格。 2.判断方法 一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好... -
Glove词向量模型笔记
2019-03-20 09:52:36GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。 任意词的中心词向量和背景词向量在GloVe模型中是等价的。原因在于Glove模型提出了词频共现矩阵的概念。 但由于初始化值的... -
支持向量机(SVM)简明学习教程(拟合)
2011-08-24 11:01:02回归分析,函数估计的SVM,有三个参数控制着SVR的性能,包括平衡参数 、 ...如果 管道宽度过大,那么支持向量的数目越少,其拟合函数将不能反映真实的函数特性;反之,如果 管道宽度过小,那么SVR的稀疏性将不能保证。 -
机器学习之过拟合、正则、特征值和特征向量
2019-11-06 22:55:28一、过拟合 在讨论什么是过拟合之前,我们先讨论一下什么是拟合:曲线拟合(fit theory),俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等... -
PCL 使用RANSAC拟合平面
2020-06-23 17:34:46RANSAC拟合平面,并对拟合后的平面法向量与向量(1,1,1)进行定向。 -
SVM支持向量机系列理论(六) SVM过拟合的原因和SVM模型选择
2018-08-03 17:12:28实际我们应用的SVM模型都是核函数+软间隔的支持向量机,那么,有以下原因导致SVM过拟合: 选择的核函数过于powerful,比如多项式核中的Q设置的次数过高 要求的间隔过大,即在软间隔支持向量机中C的参数过大时,...