精华内容
下载资源
问答
  • 主要为大家详细介绍了Tensorflow使用支持向量拟合线性回归,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 支持向量机可以用来拟合线性回归。 相同的最大间隔(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回归算法在间隔宽度内不能拟合更多的数据点;如果选择太大的ε值,将有许多条直线能够在间隔宽度内拟合所有的数据点。作者更倾向于选取更小的ε值,因为在间隔宽度附近的数据点比远处的数据点贡献更少的损失。

    展开全文
  • 支持向量机回归预测代码,亲测可用的代码
  • 一、创建向量  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)


    展开全文
  • 拟合,欠拟合 一.什么是过拟合,欠拟合 1.过拟合:对训练集特征的过度学习,仅仅适合此训练集,在泛化使用的时候不能用于其他的数据集判断. 2.欠拟合:对于训练集特征学习的欠缺,同样不适用于其他数据集的判断 . 用一个...

    过拟合,欠拟合

    一.什么是过拟合,欠拟合

    1.过拟合:对训练集特征的过度学习,仅仅适合此训练集,在泛化使用的时候不能用于其他的数据集判断.
    2.欠拟合:对于训练集特征学习的欠缺,同样不适用于其他数据集的判断
    .

    用一个表格来解释过拟合,欠拟合

    训练集上的表现 测试集上的表现 结论
    不好 不好 欠拟合
    不好 过拟合
    适度拟合

    二.过拟合的产生

    1. 训练集的数量级和模型的复杂度不匹配。训练集的数量级要小于模型的复杂度;

    2. 训练集和测试集特征分布不一致;

    3. 样本中的噪音数据干扰过大,大到模型过分记住了噪音特征,导致多余的记录;

    4. 权值学习迭代次数足够多(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)
    在这里插入图片描述

    展开全文
  • 利用最小二乘支持做向量机回归预测分析,示例代码。
  • 基于局部平面拟合求点云法向量,是我看到过的比较容易懂的,算法推导也写得很清楚
  • 点云法向量估计的主要思路是对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 用于函数拟合与模式识别的Matlab示例程序.rar 四种支持向量机用于函数拟合与模式识别的...
  • 支持向量机的回归拟合——混凝土抗压强度预测的Matlab程序代码 本资源仅供学习交流,侵删
  • chapter29 支持向量机的回归拟合——混凝土抗压强度预测
  • 1、点云法向量估计的主要思路是对K-近邻的N个点进行平面拟合(平面过N点重心),平面法向量即为所求; 2、最小二乘拟合可以转换为求协方差矩阵最小特征值对应的特征向量(SVD分解);此种解法对数据噪声有很强的...
  • 神经网络仿真作业,设计支持向量机实现一对数组的函数拟合P=-1:0.1:1T=[-0.96 -0.577 ..... .....]使用支持向量机相应的回归函数svr, svrplot , svroutput进行函数拟合的仿真实验中采用rbf核函数,惩罚因子取100...
  • 四种支持向量机用于函数拟合与模式识别的Matlab示例程序
  • 支持向量机的三要素:模型:分离超平面 w*x+b=0 和决策函数 f(x)=sign(w*x+b)策略:结构风险最小化,具体对于SVM是间隔最大化算法:凸二次规划对于支持向量机的模型和算法,都比较好理解,那它的策略间隔最大化,为...
  • 利用最小二乘法求解点云/点集/多点的拟合平面,求解点云的法向量
  • 特征值与特征向量特征值的基本定义:设A为n阶矩阵,若存在常数λ及n维非零向量x,使得Ax=λx,则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。A的所有特征值的全体,叫做A的谱,记为λ(A)使用特征值求特征向量...
  • 代码解释的详细,可以直接用,已经测试过了,很好用。
  • 支持向量机SVM的策略和过拟合问题

    千次阅读 2018-09-01 10:59:44
    支持向量机的三要素: 模型:分离超平面 w*x+b=0 和决策函数 f(x)=sign(w*x+b) 策略:结构风险最小化,具体对于SVM是间隔最大化 算法:凸二次规划 对于支持向量机的模型和算法,都比较好理解,那它的策略间隔...
  • 特征值,特征向量 1.公式 2.具体解释 一.过拟合 1. 概念 过拟合是指为了得到一致假设而使假设变得过度严格。 2.判断方法 一个假设在训练数据上能够获得比其他假设更好的拟合, 但是在训练数据外的数据集上却不能很好...
  • Glove词向量模型笔记

    2019-03-20 09:52:36
    GloVe模型采用了平方损失,并通过词向量拟合预先基于整个数据集计算得到的全局统计信息。 任意词的中心词向量和背景词向量在GloVe模型中是等价的。原因在于Glove模型提出了词频共现矩阵的概念。 但由于初始化值的...
  • 回归分析,函数估计的SVM,有三个参数控制着SVR的性能,包括平衡参数 、 ...如果 管道宽度过大,那么支持向量的数目越少,其拟合函数将不能反映真实的函数特性;反之,如果 管道宽度过小,那么SVR的稀疏性将不能保证。
  • 一、过拟合     在讨论什么是过拟合之前,我们先讨论一下什么是拟合:曲线拟合(fit theory),俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等...
  • PCL 使用RANSAC拟合平面

    万次阅读 2020-06-23 17:34:46
    RANSAC拟合平面,并对拟合后的平面法向量向量(1,1,1)进行定向。
  • 实际我们应用的SVM模型都是核函数+软间隔的支持向量机,那么,有以下原因导致SVM过拟合: 选择的核函数过于powerful,比如多项式核中的Q设置的次数过高 要求的间隔过大,即在软间隔支持向量机中C的参数过大时,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,381
精华内容 952
关键字:

向量拟合