精华内容
下载资源
问答
  • 如何绘制middle和out关于veh的两条拟合曲线在一张图上,不是在两张图上。。 p1=qplot(veh, middle, data = B,geom = "smooth", main = "smooth") p2=qplot(veh,out,data = B,geom = "smooth", main = "smooth") grid...
  • 在python中一般采用matplotlib库的hist来绘制直方图,至于如何给直方图添加拟合曲线(密度函数曲线),一般来说有以下种方法。 方法一:采用matplotlib中的mlab模块 mlab模块是Python中强大的3D作图工具,立体感...
  • Opencv4图像分割和识别实战6的视频课程(https://edu.csdn.net/course/detail/24864)主要是讲解如何两条曲线之间的距离。对应的,本课作业来求下面图所示的两条直线间距离以巩固课堂上所学的知识。 解决方法一...

    前言

    Opencv4图像分割和识别实战6的视频课程(https://edu.csdn.net/course/detail/24864)主要是讲解如何求两条曲线之间的距离。对应的,本课作业来求下面图所示的两条直线间距离以巩固课堂上所学的知识。

    解决方法一 

    1)通过前面所学的投影分割法来分别获得这2条直线上的离散采样点,然后将它们通过直线拟合求得各自的直线方程,如k1x+b和k2x+b2。 

    2)在其中一条直线上任取一点(x1,y1),然后向另外一条直线做垂线,该垂线方程很好求,其斜率为-(1/k1)

    3)求出垂线方程后,即可求垂线和第二条直线的交点(x2,y2)

    4)根据欧式距离公式,即可求得当前点到另外一条直线的距离dist=sqrt((x1-x2)^2+(y1-y2)^2)

    解决方法二

    第一个方法虽然直观,但是比较繁琐。 我们这里借助于课程里面计算两条曲线间距离的方法来求解。

    这里面重点要理解两个概念

    1)连通域分析,即连在一起的前景被当作一个独立的目标,并给与对应的label号。它也是传统图像处理中常用的图像分割和识别的手段。

    2)distanceTransform()的使用。该api是用来计算前景像素(白色)到最近的背景像素(黑色)的距离。利用它就可以求点到直线的垂直距离了。 

    当然,这两个概念以及背后的算法原理会在课堂上结合实例进行详细解释。 

    回到本次课后作业,我们可以先进行连通域分析来区分开这两条直线,并分别打上1和2的label号,如下局部放大图所示,上下分别是两条直线的label。

    然后想办法,把第一条线变黑,图像其余部分都是白色,调用distanceTransform()来自动计算所有白色像素到第一条(黑色)直线的垂直距离,并且这些白色像素的像素值由255变成各自的垂直距离值了。 其中一部分值如下图所示。

     

    上面的操作在类似做一次,就可以求得第一条直线上各点到第二条直线得距离。

    具体代码和求两条曲线距离得几乎完全一样,这里就不贴了,课件里面会上传。

     

     

     

    展开全文
  • 拟合方法中,要求找出某光滑曲线拟合给定的数据,但不必经过给定的数据点。插值和拟合都是根据一些已知的数据来构造未知数据,所不同的是,拟合要找出一个曲线方程式,而插值只要求得插值点数据即可。  曲线...
  • 在先前的篇帖子中讨论了基本的线性回归和逻辑回归的问题,这些模型还比较理想,实际情况下样本数据的分布可能并没有这么完美,这个时候就会产生一系列的问题。...那么如何拟合得到这样的曲线呢? 在处理...

    在先前的两篇帖子中讨论了基本的线性回归和逻辑回归的问题,这些模型还比较理想,实际情况下样本数据的分布可能并没有这么完美,这个时候就会产生一系列的问题。

    1 非线性回归

    很多时候我们碰到的回归问题并不是线性的,而是非线性的。换句话说,我们的样本数据分布不是一条完美的直线,而是一条曲线。以之前线性回归的例子,如下图所示,样本数据的分布更符合一条曲线的形状。那么如何去拟合得到这样的曲线呢?

    在处理非线性回归的问题上,我们一般有两种方法,第一种是想办法转换成线性的关系,第二种是用多项式模型逼近。

    ①转换成线性关系

    这种方法适合于函数模型简单的非线性关系,在拟合前,我们可以先观察下样本的分布情况,判别其曲线的模型。比如说我观察得出样本的分布似乎符合h_{\Theta }(x) = Ae^{\Theta^{T} x}曲线关系,此时如果我们在左右两边同时取对数,就可以得到lnh_{\Theta }(x)=lnA+\Theta ^{T}x,令h_{\Theta }(x)=lnh_{\Theta }(x),得到h_{\Theta }(x)=lnA+\Theta ^{T}x,如此一来我们就可以把非线性问题转换成线性问题。

    ②多项式模型

    多项式模型在非线性回归分析中占有重要的地位。根据级数展开的原理,任何曲线、曲面、超平面的问题,在一定的范围内都能够用多项式任意逼近,有点像高数里的泰勒展开式。

    其一般形式为:h_{\Theta } (x)=\Theta _{0}+\Theta_{1}x+\Theta _{2}x^{2}+...+\Theta _{n}x^{n},然后用最小二乘法和梯度下降法即可确定系数。

    2 特征缩放

    假设你现在有一个二特征的回归问题,还是以房子为例。其中一个特征是房屋的总面积大小,其范围在0~2000平米,另外一个特征是厕所的面积,其范围在0~20平米。这时你最后得到的代价函数可能是这样子的:

    一个方向上极其的长,另一个方向上极其的短,这时如果使用梯度下降法,因为学习速率\alpha是固定的,如果设的比较小,在使用梯度下降法的求解最优点就会变得非常慢。所以我们必须对特征变量进行归一化,将特征变量缩小到0~1范围。在这个例子中我们只需要把房屋总面积除以2000,厕所面积除以20就可以了。另外,亲测在实际进行梯度下降法的迭代过程中,如果没有进行归一化,很可能会造成数据溢出,导致算法奔溃。

    3 学习速率的选择

    学习速率\alpha过大或者过小都会产生一些问题,如果过小,在使用梯度下降法时就会很慢。而学习速率如果很大将会导致发散。如下图所示:

    在运用梯度下降法时,我们是根据\Theta _{j}:=\Theta _{j}-\alpha \frac{\partial }{\partial \Theta }_{j}J(\Theta )在程序中进行迭代求得最优的特征系数,如果\alpha过大,\Theta将会沿着图中红色的路径变化,变成\Theta ^{'}\Theta ^{''}\Theta ^{'''}\Theta ^{''''}\Theta ^{'''''}……,无法收敛到局部最小值,反而会一直发散下去。为了更加容易理解,我们试想一下自己拥有和奥特曼一样长的大长腿,站在一座山上。为了到达山谷我们沿着坡度往下走,可是这个时候由于我们的腿太长,步长太大,直接跨到了对面的一座山上,于是又往下走,又跨到了原来的山上,但是比原先的位置更高一点……如此循环我们只会越爬越高,永远都到不了山谷。

    4 正则化

    下图展示了用多项式拟合曲线的结果。第一幅图显然差强人意,通常把这样的结果称作欠拟合。第三幅图拟合结果似乎还行,但是曲线变化剧烈,如果在样本数据中又有一个很明显的噪声,拟合所得的曲线又会是另外一番样子,这时所得的模型就没有很好的泛化能力,通常把这样的结果称作过拟合(overfitting)。而我们期望得到的模型是第二幅图所示的样子。

    再来看逻辑回归的例子,图一中是欠拟合的结果,决策边界并没有很好的将样本数据分类。图三是过拟合的结果,这决策边界太完美了,但是中间被曲线包裹的x状点很可能是噪声,用这样的模型去分类,很可能会造成更多的误差。而我们期望得到的是图二的模型。

    在机器学习中,欠拟合可以通过增加样本数据等一系列方法解决。但是过拟合就比较麻烦了,于是我们引入了正则化项\lambda \sum_{i=1}^{n}\Theta ^{2}_{j}

    正则化项通常是加在代价函数后面的,这样新的代价函数就为J(\Theta)=\frac{1}{2m}\sum_{i=1}^{m} (h_{\Theta }(X^{(i)})-Y^{(i)})^{2}+\lambda \sum_{i=1}^{n}\Theta ^{2}_{j}。那么怎样理解正则化项对于防止过拟合的作用呢?

    以多项式拟合为例,过拟合往往是高幂次项作用的结果,假设正则化项中\lambda如果很大,在\Theta _{j}也很大的情况下,高幂次项的作用就会被放大,代价函数值就会很大。我们要让代价函数最小,\Theta _{j}​​​​​只能趋向于0。

    试想一下上图中过拟合的结果,在引入正则化项后,计算代价函数最小值时,如果得到的\Theta _{3}\Theta _{4}都趋向于0那么得到的不就和我们想要的模型差不多了嘛。

     

     

    展开全文
  • 拟合方法中,要求找出某光滑曲线最佳地拟合给定的数据,但不必经过给定的数据点。插值和拟合都是根据一些已知的数据来构造未知数据,所不同的是,拟合要找出一个曲线方程式,而插值只要求得插值点数据即可。  ...
  • ISP流程Gamma校正思路

    2020-12-31 16:45:54
    通过查看Json表可以看到当前标准模式下有我们想要的两条Gamma曲线,这两条Gamma曲线通过插值的方法决定我们所使用的Gamma曲线,我们如果想要使用接近我我们在PQtool上拉出来的gamma曲线,那就需要不断不断的调试与...

    ISP流程Gamma校正思路

    这两天一直在做一个工作关于调整Gamma曲线使得图像在高曝光区域可以良好适应。

    遇到有一个难题,是如何将我们在PQtool工具中调试的gamma对应的数值写入到设备程序当中。

    通过查看Json表可以看到当前标准模式下有我们想要的两条Gamma曲线,这两条Gamma曲线通过插值的方法决定我们所使用的Gamma曲线,我们如果想要使用接近我我们在PQtool上拉出来的gamma曲线,那就需要不断不断的调试与查看,看最后拟合出来的Gamma曲线是否接近我们所设定的形状。

    今天主要的工作是降低过曝区域的图像亮度,理所应当我们应该适当降低gamma曲线位于图像灰度值较大的一部分,但是我们为了拟合出来的曲线比较符合人眼的视觉感知,那就需要对json表中的曲线灰度值较大的部分进行适当降低,前面的灰度值较小部分调整较小。下图是我通过不断调试,写入Json表,然后得到的当前情况下拟合的Gamma曲线,效果还是比较好的。

    下图是应用新的Gamma曲线得到的图像结果,能够较好的抑制图像中的高亮区域,可以使用FastStone Capture工具来对图像白色部分进行测量。

    gamma调试看上去仅仅是简单的拉一拉曲线,但是如何将拉好的曲线应用到设备上,写入代码当中,这个是需要我们反复调试的。

    2021/1/4注:

    我们在修改json表的时候,目前方法是通过对两条gamma曲线进行插值,一般第一条曲线是保证图像亮度,第二条曲线保证图像对比度,我们在修改第一天Gamma曲线的时候需要保证Gamma曲线自身的平滑度,不能随意修改数值,否则曲线中可能会出现折线的现象。

    展开全文
  • 它是对一组观测拟合条曲线或某种函数,然后再用拟合出的曲线或函数预测未知的值。回归分析中最常见的是线性回归。 线性回归就是用一条直线去拟合一组观测。例如,我们有一组个人数据,其中有个特征,即身高和...

    预测模型:

    1.线性回归

    回归分析是数据科学和统计学中的一个热门话题。它是对一组观测拟合一条曲线或某种函数,然后再用拟合出的曲线或函数预测未知的值。回归分析中最常见的是线性回归。
    线性回归就是用一条直线去拟合一组观测。例如,我们有一组个人数据,其中有两个特征,即身高和体重。总之,线性回归就是用一条直线去拟合一组数据点。
    在这里插入图片描述
    (1)普通最小二乘法
    如何进行线性回归?最常用的技术称为普通最小二乘法,简称 OLS。它的原理是使每个数据点与直线之间的误差的平方和最小。误差就是数据点和拟合出的直线之间的距离。
    我们要将这些误差的平方都加起来,这看起来非常像计算方差,没错,只不过计算方差时误差是相对于均值的,而这里的误差是相对于我们拟合出的直线的。我们可以计算出数据点相对于直线的误差平方和,然后使这个平方和最小化,就可以找出最优拟合直线。
    请记住用斜率和截距确定直线的公式:y = mx + b。斜率就是两个变量之间的相关系数乘以 Y的标准差再除以 X 的标准差。截距的计算方法是,用 Y 的均值减去斜率与 X 的均值的乘积。
    (2)梯度下降法
    它在三维数据上的效果最好,试图为你描绘出数据的轮廓。虽然这种方法的效果非常好,但是需要更多的计算成本。在处理 3D 数据时,非常适合使用梯度下降法。经常使用在高维数据中。
    (3)判定系数或 r 方
    a. 计算 r 方
    在这里插入图片描述
    b.解释 r 方
    r 方的值在 0 和 1 之间。0 意味着拟合非常糟糕,没有捕获到数据中的任何变动。1 则意味着拟合非常完美,拟合直线可以捕获数据的所有变动,而且直线两侧的变动应该是一样的。所以 0是不好的,1 是好的,0 和 1 之间的值表示拟合效果处在好与坏之间。r 方值比较低说明拟合效果不好,r 方值较高说明拟合效果很好。
    (4)使用 Python 进行线性回归并计算 r 方

    import numpy as np
    import matplotlib.pyplot as plt
    
    pageSpeeds=np.random.normal(3.0,1.0,1000)
    purchaseAmount=100-(pageSpeeds+np.random.normal(0,0.1,1000))*3
    plt.scatter(purchaseAmount,pageSpeeds)
    plt.show()
    

    在这里插入图片描述
    用普通最小二乘法找出最优拟合直线:
    从 scipy 包中导入 stats 包,然后调用 stats.linregress()来处理。linregress()函数返回的内容非常丰富,包括斜率和截距,这是确定最优拟合直线所需的参数。它还会返回 r_value,我们可以从中得到 r 方的值,度量一下拟合的质量。还有另外两个指标,随后会介绍,眼下我们只需要斜率、截距和r_value。

    # slope 表示斜率
    # intercept 表示截距
    # r_value 表示得到r方的值,度量一下拟合的质量
    slope, intercept, r_value, p_value, std_err=stats.linregress(pageSpeeds,purchaseAmount)
    print(r_value**2)   #r方的值 0.9901814910672613
    
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy import stats
    # from pylab import *
    
    pageSpeeds=np.random.normal(3.0,1.0,1000)
    purchaseAmount=100-(pageSpeeds+np.random.normal(0,0.1,1000))*3
    # slope 表示斜率
    # intercept 表示截距
    # r_value 表示得到r方的值,度量一下拟合的质量
    slope, intercept, r_value, p_value, std_err=stats.linregress(pageSpeeds,purchaseAmount)
    def predict(x):
        return slope*x+intercept
    fitLine=predict(pageSpeeds)
    plt.scatter(pageSpeeds,purchaseAmount)
    plt.plot(pageSpeeds,fitLine,'r')
    plt.show()
    

    在这里插入图片描述

    2.多项式回归

    不是所有的关系都是线性的,线性回归只是各种回归中的一种。线性回归直线的形式是y = mx + b,其中的 m 和 b 是通过普通最小二乘法或其他方法得到的。这只是一阶多项式。阶就是 x 的次数,所以 y = mx + b 是一阶多项式。如果需要,可以使用二阶多项式,它的形式是 y = ax2 + bx + c。如果使用二阶多项式进行回归,就应该找出 a、b 和 c 的值。还可以使用三阶多项式,它的形式为 y = ax3 + bx2 + cx + d。阶数越高,表示的曲线越复杂。所以,随着 x 次数的升高,你可以得到形状更复杂的曲线,表示出更复杂的关系。但是,并不是次数越高越好。通常,数据中的本质关系并不是那么复杂,如果你使用特别高的次数去拟合数据,就会导致过拟合!
    一定要当心过拟合!
    1)如果不必要,就不要使用更高的次数。
    2)先进行数据可视化,看看需要使用多复杂的曲线。
    3)对拟合结果进行可视化,检查一下你的曲线是否因为离群点而改变了形状。
    4)高 r 方值只能说明曲线对训练数据拟合得很好,但不一定有好的预测效果。
    稍后,我们会介绍一种预防过拟合的方法,称为训练/测试。
    (1)使用 NumPy 实现多项式回归
    np.random.seed 这行代码作用就是创建一个随机数种子,这意味着后面的随机操作都是确定的。这样可以确保每次运行这段代码时都能得到同样的结果。
    从图中可以看出,数据中没有线性关系。可以试着拟合一条直线,这条直线对于大多数数据点还可以,它比较接近于图形右侧的数据点,但对于左侧的数据点,就差得比较远了。我们应该使用一条指数曲线。

    import numpy as np
    import matplotlib.pyplot as plt
    
    np.random.seed(2)
    pageSpeeds=np.random.normal(3.0,1.0,1000)
    purchaseAmount=np.random.normal(50.0,10.0,1000)/pageSpeeds
    plt.scatter(pageSpeeds,purchaseAmount)
    plt.show()
    

    在这里插入图片描述

    NumPy 中有个 ployfit 函数,可以非常容易地实现多项式回归,允许用任意阶数的多项式去拟合数据。例如,可以将
    页面载入速度(pageSpeeds)数组作为 x 轴,将购物金额(purchaseAmount)数组作为 y 轴,然后调用 np.polyfit(x, y, 4),使用四阶多项式来拟合数据。

    import numpy as np
    import matplotlib.pyplot as plt
    
    np.random.seed(2)
    pageSpeeds=np.random.normal(3.0,1.0,1000)
    purchaseAmount=np.random.normal(50.0,10.0,1000)/pageSpeeds
    x=np.array(pageSpeeds)
    y=np.array(purchaseAmount)
    p4=np.poly1d(np.polyfit(x,y,4)) #使用四阶多项式来拟合数据
    #np.linspace主要用来创建等差数列
    xp=np.linspace(0,7,100)
    plt.scatter(x,y)
    plt.plot(xp,p4(xp),'r')
    plt.show()
    

    在这里插入图片描述
    (2)计算 r 方误差
    我们可以计算 r 方误差。在 sklearn.metrics 包中,有个 r2_score()函数,使用 y 和 p4(x)作为参数,就可以计算出 r 方误差。
    0 最差,1 最好,0.82 相当接近于 1,显然不是很完美,但已经可以了。可以看出,曲线在数据的中段表现相当好,在数据的最左侧和最右侧则不那么好。所以,0.82应该是个正确的值。

    import numpy as np
    from sklearn.metrics import r2_score
    
    np.random.seed(2)
    pageSpeeds=np.random.normal(3.0,1.0,1000)
    purchaseAmount=np.random.normal(50.0,10.0,1000)/pageSpeeds
    x=np.array(pageSpeeds)
    y=np.array(purchaseAmount)
    p4=np.poly1d(np.polyfit(x,y,4)) #使用四阶多项式来拟合数据
    r2=r2_score(y,p4(x))
    print(r2)  #0.8293766396303073
    

    (3)多项式回归练习

    import numpy as np
    from sklearn.metrics import r2_score
    import matplotlib.pyplot as plt
    
    p8=np.poly1d(np.polyfit(x,y,8)) #使用八阶多项式来拟合数据
    xp=np.linspace(0,7,100)
    plt.scatter(x,y)
    plt.plot(xp,p8(xp),'r')
    plt.show()
    r2=r2_score(y,p8(x))
    print(r2)   #0.8814395663681522
    

    3.多元回归和汽车价格预测

    我们想知道这些不同因素组合在一起是如何影响预测值的,这时就需要使用多元回归。
    假设我们想预测一下汽车的价格,这个价格可能由汽车的多个特征决定,比如车身风格、品牌、里程数,甚至是轮胎的质量,等等。在预测汽车价格时,有些特征比其他特征更为重要,但你必须同时考虑所有特征。
    这里进行多元回归的方法仍然是使用最小二乘法对观测集合拟合一个模型,与前面的区别在于,我们要得到多个系数,每个特征都要有一个系数。
    所以,举例来说,最后的价格模型应该是个线性组合,它是由一个类似于截距的常数项 α,加上里程数及其系数,加上车龄及其系数,再加上车门数及其系数组成的。
    在这里插入图片描述
    (1) 使用 Python 进行多元回归
    这里引入了一个新的包,名为 pandas,它可以让我们非常容易地处理表格数据。它可以读入表格数据,并对其进行各种形式的重新排列、修改、切片和切丁。后面我们会经常用到这个包。
    将 pandas 导入为 pd,pd 中有个 read_Excel()函数,可以从 HTTP 网页中读取 Microsoft Excel 电子表格。所以,pandas 的功能是非常强大的。
    将这个 Excel 电子表格文件读取到本地,如果运行上面的代码,它会将数据加载到一个DataFrame 对象,我们将这个对象命名为 df。然后对这个数据框调用 head()函数,看看它的前几行数据:

    import pandas as pd
    df=pd.read_excel('http://cdn.sundog-soft.com/Udemy/DataScience/cars.xls')
    
    print(df.head())
    

    在这里插入图片描述
    现在要使用 pandas 将我们关心的特征分离出来。我们将基于里程数、型号和车门数来构造模型去预测汽车价格,其他特征都不用了。
    在代码中,我们使用 pandas 中的Categorical()函数将数据框中的型号数据转换成了一组数值,也就是一组编码。模型在 x 轴上的输入是里程数(Mileage)、转换为定序数据的型号(Model_ord)和车门数(Doors)。在y 轴上要预测的值是价格(Price)。接下来的两行代码使用普通最小二乘法(OLS)创建了一个模型 est,并使用 Mileage、Model_ord 和 Doors 进行拟合。然后调用 summary 方法打印出模型。

    import pandas as pd
    from pylab import *
    import statsmodels.api as sm
    df=pd.read_excel('http://cdn.sundog-soft.com/Udemy/DataScience/cars.xls')
    
    print(df.head())
    df['Model_ord'] = pd.Categorical(df.Model).codes
    X = df[['Mileage', 'Model_ord', 'Doors']]
    y = df[['Price']]
    X1 = sm.add_constant(X)
    est = sm.OLS(y, X1).fit()
    E=est.summary()
    print(E)
    

    在这里插入图片描述

    import pandas as pd
    from pylab import *
    import statsmodels.api as sm
    df=pd.read_excel('http://cdn.sundog-soft.com/Udemy/DataScience/cars.xls')
    
    df['Model_ord'] = pd.Categorical(df.Model).codes
    X = df[['Mileage', 'Model_ord', 'Doors']]
    y = df[['Price']]
    e=y.groupby(df.Doors).mean()
    print(e)
    '''
                  Price
    Doors              
    2      23807.135520
    4      20580.670749
    '''
    
    展开全文
  • 所谓回归,就是通过一些已知点来拟合条曲线,从而能够预测一些未知点的值。 线性回归就是用一次函数 y=ax+by=ax+by=ax+b ,进行拟合。不过在机器学习中更加喜欢写成 hθ(x)=θ0+θ1xh_\theta(x) = \theta_0 + \...
  • 8.2.9 Average Multiple Curves平均多条曲线 8.2.10 Subtract Straight Line、Subtract Reference Data扣除数据 8.2.11 Vertical Translate、Horizontal Translate平移曲线 第9章 信号处理 9.1 信号处理概述 9.1.1 ...
  • 动感环绕效果是由四段贝塞尔曲线拟合实现的。但这种方式出来的效果跟真正的动感环绕差别很大,所以鲸云音效不太可能是由这种方式实现的。如果有更贴近的实现方法,希望不吝赐教。运动中的圆环,是不断的随机更改...
  • visio教程PDF

    热门讨论 2010-05-17 23:56:22
    17.6.2 直线—曲线连接器 17.6.3 图形连接器 17.7 同时连接多个图形 17.8 拖动时连接图形 17.9 激活Snap&Glue工具栏 17.10 跳线与布线 17.11 小结 第18章 快速安排图形格局 18.1 快速安排图形...
  • Visio 2000 技术大全

    2010-05-01 13:38:29
    17.6.2 直线—曲线连接器 17.6.3 图形连接器 17.7 同时连接多个图形 17.8 拖动时连接图形 17.9 激活Snap&Glue工具栏 17.10 跳线与布线 17.11 小结 第18章 快速安排图形格局 ...

空空如也

空空如也

1 2
收藏数 23
精华内容 9
关键字:

两条曲线如何拟合