• 如何画根据散列节点画一条二维曲线


     Polynomial‘s Examples
     一个二元线性数据学习的例子。初衷即使希望能够看到基于二次曲线的随机点,训练模型能够画出一条二次曲线。
     1 >>> X = np.arange(6).reshape(3, 2)
     2 >>> X
     3 array([[0, 1],
     4 [2, 3],
     5 [4, 5]])
     6 >>> poly = PolynomialFeatures(2)
     7 >>> poly.fit_transform(X)
     8 array([[ 1., 0., 1., 0., 0., 1.],
     9 [ 1., 2., 3., 4., 6., 9.],
    10 [ 1., 4., 5., 16., 20., 25.]])
    11 >>> poly = PolynomialFeatures(interaction_only=True)
    12 >>> poly.fit_transform(X)
    13 array([[ 1., 0., 1., 0.],
    14 [ 1., 2., 3., 6.],
    15 [ 1., 4., 5., 20.]])
    首先是对6元素的数组进行reshape,3行2列。
    通过Polynomial函数的fit_transform可以为其添加全“1”列,以及a*b, a*a, b*b三列。
     
    #多项式回归
    #二次回归(Quadratic Regression),y = α + β1x + β2x2,我们有一个解释变量,但是模型有三项,通过第三项(二次项)来实现曲线关系
    import numpy as np
    from sklearn.linear_model import LinearRegression
    from sklearn.preprocessing import PolynomialFeatures
     
    def runplt():
    plt.figure()
    plt.axis([0,25,0,25],fontsize=18)
    plt.grid(True)
    return plt
     
    X_train = [[6], [8], [10], [14], [18]]
    y_train = [[7], [9], [13], [17.5], [18]]
    X_test = [[6], [8], [11], [16]]
    y_test = [[8], [12], [15], [18]]
     对于数据集进行拆分,其中test数据是用于评分的validation set;train数据是用于训练的的;
    1 plt = runplt()
    2 regressor = LinearRegression()
    3 regressor.fit(X_train,y_train)
    4 xx = np.linspace(0, 26, 100)
    5 print(xx)
    6 print(xx.shape[0])
    7 yy = regressor.predict(xx.reshape(xx.shape[0], 1))
    8 plt.plot(X_train, y_train, 'k.')
    9 plt.plot(xx, yy)
     上面这段代码只是直接进行线性学习,于是得到的也只是一条穿过尽量多点的一条直线而已。
     
    #构造第三项
     1 quadratic_fearurizer = PolynomialFeatures(degree=2)
     2 X_train_quadratic = quadratic_fearurizer.fit_transform(X_train)
     3 X_test_quadratic = quadratic_fearurizer.transform(X_test)
     4 regressor_quadratic = LinearRegression()
     5 regressor_quadratic.fit(X_train_quadratic, y_train)
     6 xx_quadratic = quadratic_fearurizer.transform(xx.reshape(xx.shape[0],1))
     7 print(xx.reshape(xx.shape[0],1))
     8 print(xx_quadratic)
     9 plt.plot(xx,regressor_quadratic.predict(xx_quadratic),'r-')
    10 plt.show()
    11 print ('一元线性回归 r^2: %.2f'%regressor.score(X_test,y_test))
    12 print('二次回归 r^2: %.2f'%regressor_quadratic.score(X_test_quadratic, y_test))

       quadratic_fearurizer.fit_transform(X_train) 里面fit和regressor_quadratic.fit(X_train_quadratic, y_train) fit是不一样的,前者是对于X_train进行多项式化,返回一个a,b, a*a, ab, b*b的矩阵,后者则是一种学习,对于前者返回的多项式矩阵以及y_train进行学习,构建模型,求出误差最小的系数矩阵,这样就建立了基于输入数据的模型。

      上面这段代码主要是对于X_train进行多项式化,然后将多项式以及y_train放入到线性模型中进行学习,此时X值已经不再是上面的简单的直线模型,而是一个二元函数,线性模型将会基于二次方程来尽量匹配y_trian(计算系数矩阵);很好,有了这个模型后,我们在首先是根据随记生成的数据(xx)转换为列项列(第6行),因为未来我们进行predict的时候,参数需要是列向量的(是这样吗),于是在第9行,我们看到X序列就是xx,y序列是经过线性模型转化的值。

      这里数据是分成三部分,X_train,y_train是用于训练的,X_test以及y_test是用于测试(分数)的,xx(变形后的xx_quadratic)则是扮演“辅助线”的功能,主要用于显示一条二元曲线。

  • 相关阅读:
    opencv学习记录之霍夫变换
    opencv学习记录之模板匹配
    opencv之傅里叶变换
    opencv学习记录之图像金字塔
    opencv学习记录之图像梯度
    opencv学习记录之形态学操作
    opencv学习记录之腐蚀和膨胀
    使用Python解析豆瓣上Json格式数据
    互联网之子--亚伦.斯沃茨
    Json技术使用代码示例
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/9614754.html
Copyright © 2020-2023  润新知