3数据升维我们
在数据升维中,统计建模方式分为交互性特征(Interaction Feature)和多项式特征(Polynomial Featur)。
3.1交互性特征(Interaction Feature)
array_1 = [0,1,2,3,4] array_2 = [5,6,7,8,9] array3 = np.hstack((array_1,array_2)) print("将数组2添加到数据1后面去得到:\n{}".format(array3))
输出
将数组2添加到数据1后面去得到: [0 1 2 3 4 5 6 7 8 9] |
可以发现,通过hstack,把两个数组合并为了一个数组。
#将原始数据和装箱数据进行堆叠 X_stack = np.hstack([X,X_in_bin]) print("X.shape:\n",X.shape) print("X_in_bin.shape:\n",X_in_bin.shape) print("X_stack.shape:\n",X_stack.shape)
输出
X.shape: (50, 1) X_in_bin.shape: (50, 10) X_stack.shape: (50, 11)
X_stack仍旧为50个数据,但是特征数为原始特征数1+装箱后特征数10=11。接下来我们将数据进行堆叠,用MLPRegressor进行拟合。
#将数据进行堆叠 line_stack =np.hstack([line,onehot_line]) mlpr_interact =MLPRegressor().fit(X_stack,y) plt.plot(line,mlpr_interact.predict(line_stack),label='MLP forinteraction') plt.ylim(-4,4) for vline in bins: plt.plot([vline,vline],[-5,5],":",c='k') plt.legend(loc='lowerright') plt.plot(X,y,"o",c='g') plt.show()
我们发现,每一个箱子中的斜率加大了,但是由于刚才使用的是np.hstack([X,X_in_bin])进行堆叠,所以它们的斜率是一致的。现在我们使用np.hstack([X_in_bin,X*X_in_bin]) 进行堆叠。
#使用新的叠堆方式处理数据 X_multi = np.hstack([X_in_bin,X*X_in_bin]) print("X_multi.shape:\n",X_multi.shape) print("X_multi[0]:\n",X_multi[0])
输出
X_multi.shape: (50, 20) X_multi[0]: [0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 4.84191851]
我们可以看见,它包含了原始数据4.84191851和OneHotEncoder独热编码后的哑变量1。接下来我们用这种堆叠进行拟合。
mlpr_multi = MLPRegressor().fit(X_multi,y) line_multi =np.hstack([onehot_line,line*onehot_line]) plt.plot(line,mlpr_multi.predict(line_multi),label='MLP for Regressor') plt.ylim(-4,4) for vline in bins: plt.plot([vline,vline],[-5,5],":",c='k') plt.legend(loc='lowerright') plt.plot(X,y,"o",c='g') plt.show()
这样,每一个箱子中的斜率不为0,且每个箱子中的斜率也不一样。大家可以发现经过这样处理后原先MLP简单的线性拟合直线被分割成了10段直线,且每段直线的斜率不同,这样就可以把一个简单的模型复杂化。大家都知道,线性模型在高维数据中表现良好,而在低维数据中就变现不佳,通过数据升维可以让线性模型更好处理低维数据。
3.2多项式特征(Polynomial Featur)
ax4+bx3+cx2+dx+e是一个典型的多项式。
rnd = np.random.RandomState(56) x =rnd.uniform(-5,5,size=50) X = x.reshape(-1,1) y_no_noise = (np.cos(6*x)+x) y = (y_no_noise +rnd.normal(size=len(x)))/2 poly = PolynomialFeatures(degree=20,include_bias=False) X_poly = poly.fit_transform(X) print(X_poly.shape) print("原始数据第一个样本:\n {} ".format(X[0])) print("多项式处理后第一个样本:\n{}".format(X_poly[0])) print("PolynomialFeatures对原始数据的处理:\n{}".format(poly.get_feature_names()))
输出:
(50, 20) 原始数据第一个样本: [4.84191851] 多项式处理后第一个样本: [4.84191851e+00 2.34441748e+01 1.13514784e+02 5.49629333e+02 2.66126044e+03 1.28856062e+046.23910549e+04 3.02092403e+05 1.46270680e+06 7.08230711e+063.42919539e+07 1.66038846e+08 8.03946561e+08 3.89264373e+091.88478637e+10 9.12598202e+10 4.41872612e+11 2.13951118e+121.03593388e+13 5.01590740e+13] PolynomialFeatures对原始数据的处理: ['x0','x0^2', 'x0^3', 'x0^4', 'x0^5', 'x0^6', 'x0^7', 'x0^8', 'x0^9', 'x0^10','x0^11', 'x0^12', 'x0^13', 'x0^14', 'x0^15', 'x0^16', 'x0^17', 'x0^18','x0^19', 'x0^20']
在这里:
4.84191851e+00 =4.84191851e+001
2.34441748e+01 =4.84191851e+002
1.13514784e+02 =4.84191851e+003
5.49629333e+02 =4.84191851e+004
…
5.01590740e+13 =4.84191851e+0020
我们用多项式处理后的数据用LinearRegression进行拟合后图形化显示。
line = np.linspace(-5,5,1000,endpoint=False).reshape(-1,1) LNR_poly = LinearRegression().fit(X_poly,y) line_poly =poly.transform(line) plt.plot(line,LNR_poly.predict(line_poly),label='Line Regressor') plt.xlim(np.min(X)-0.5,np.max(X)+0.5) plt.ylim(np.min(y)-0.5,np.max(y)+0.5) plt.plot(X,y,"o",c='g') plt.legend(loc='lowerright') plt.show()
—————————————————————————————————
软件安全测试
https://study.163.com/course/courseMain.htm?courseId=1209779852&share=2&shareId=480000002205486
接口自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209794815&share=2&shareId=480000002205486
DevOps 和Jenkins之DevOps
https://study.163.com/course/courseMain.htm?courseId=1209817844&share=2&shareId=480000002205486
DevOps与Jenkins 2.0之Jenkins
https://study.163.com/course/courseMain.htm?courseId=1209819843&share=2&shareId=480000002205486
Selenium自动化测试
https://study.163.com/course/courseMain.htm?courseId=1209835807&share=2&shareId=480000002205486
性能测试第1季:性能测试基础知识
https://study.163.com/course/courseMain.htm?courseId=1209852815&share=2&shareId=480000002205486
性能测试第2季:LoadRunner12使用
https://study.163.com/course/courseMain.htm?courseId=1209980013&share=2&shareId=480000002205486
性能测试第3季:JMeter工具使用
https://study.163.com/course/courseMain.htm?courseId=1209903814&share=2&shareId=480000002205486
性能测试第4季:监控与调优
https://study.163.com/course/courseMain.htm?courseId=1209959801&share=2&shareId=480000002205486
Django入门
https://study.163.com/course/courseMain.htm?courseId=1210020806&share=2&shareId=480000002205486
啄木鸟顾老师漫谈软件测试
https://study.163.com/course/courseMain.htm?courseId=1209958326&share=2&shareId=480000002205486