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

 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)则是扮演“辅助线”的功能,主要用于显示一条二元曲线。

 

posted on 2018-09-09 19:45  张叫兽的技术研究院  阅读(353)  评论(0编辑  收藏  举报

导航