顾老师新书《全栈软件测试工程师宝典》
https://item.m.jd.com/product/10023427978355.html
以前两本书的网上购买地址:
《软件测试技术实战设计、工具及管理》:
https://item.jd.com/34295655089.html
《基于Django的电子商务网站》:
https://item.jd.com/12082665.html
1 画学习曲线
1.1函数和类调用图
1.2 代码
代码语言:javascript复制class LearningCurve:
def__init__(self,data):
self.data = data
#定义一个绘制学习曲线的函数
defplot_learning_curve(self,estimator, title,X,y,ylim=None,cv=None,n_jobs=2,train_sizes=np.linspace(.1,1.0,5)):
if ylim is not None:
plt.ylim(*ylim)
plt.xlabel(u"训练样本")
plt.ylabel(u"得分")
plt.ylim(0,1.1)
tarining_sizes,train_scores,test_scores =learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
train_scores_mean = np.mean(train_scores,axis=1)
test_scores_mean = np.mean(test_scores,axis=1)
plt.grid()
plt.plot(tarining_sizes,train_scores_mean,'o-',label=u"训练得分",c='r')
plt.plot(tarining_sizes,test_scores_mean,'o-',label=u"交叉验证得分",c='g')
plt.legend(loc='lower right')
return plt
#画学习曲线
deflearning_curve(self,model_name,pram,title):
ML = Machine_Learn()
mytype = ML.get_pram_type(model_name)
X,y = ML.get_data(self.data)
cv = ShuffleSplit(n_splits=100,test_size=0.2,random_state=0)
mytitle =u"学习曲线(" title ")"
print(model_name)
if len(pram) == 0:
plt.figure()
clf = ML.get_model(model_name)
self.plot_learning_curve(clf,mytitle,X, y,ylim=(0.9,1.01),cv=cv)
else:
plt.figure()
pramdic = eval(pram[0])
i = 0
maxj=0
i,j = ML.Get_line_and_Column(pramdic)
m =0
for key,values in pramdic.items():
valuedics =values.split(",")
for valuedic in valuedics:
clf =ML.judg_clf(key,mytype,model_name,valuedic)
plt.subplot(i,j,m 1)
plt.title(key "=" valuedic)
self.plot_learning_curve(clf,mytitle,X, y,ylim=(0.9,1.01),cv=cv)
m=m 1
ML.set_ply_font_info_and_show(title)
#准备画学习曲线
defDraw_learn_curve(self,scattertype):
ML = Machine_Learn()
prams,model_name,title_name = ML.get_algorithm_type(scattertype)
i = 0
for pram in prams:
self.learning_curve(model_name[i],pram,title_name[i])
i = i 1
1.3调用
代码语言:javascript复制if __name__=="__main__":
lc = LearningCurve("breast_cancer")
lc.Draw_learn_curve("Liner")
lc.Draw_learn_curve("RandomForest")
lc.Draw_learn_curve("DecisionTree")
lc.Draw_learn_curve("KNeighbors")
lc.Draw_learn_curve("Bayes")
lc.Draw_learn_curve("SVM")
lc.Draw_learn_curve("Neural_network")
lc.Draw_learn_curve("Ensemble")
2 结果
本结果数据来源:
sklearn.datasets.load_breast_cancer()
2.1 线性模型
- alpha变化对整体影响不大
- 套索回归得分很低。
- alpha变化对整体影响不大。
- alpha变化整体训练数据的得分与测试数据的得分影响不大。
- L1_ratio越大,训练数据的得分与测试数据的得分越低。
总体
- alpha变化整体训练数据的得分与测试数据的得分影响不大。
- 逻辑回归比线性回归训练数据的得分与测试数据的得分要高。
- 套索回归、弹性网络训练数据的得分与测试数据的得分相对比线性回归低。 2.2 随机森林
- n_estimators变化对整体训练数据的得分与测试数据的得分影响不大。
- n_estimators变化对整体训练数据的得分与测试数据的得分影响不大。
总体
- 随机森林算法明显存在过拟合现象。
2.3 决策树
- 开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降。
- max_deep越大,过拟合现象越严重。当训练集数据多了以后,过拟合现象逐步减弱,但数据得分与训练数据相等的速度数据增大而变慢。
- 最后不管max_deep多大,最后训练数据的得分与测试数据的得分基本保持一致。
- 开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降。
- max_deep越大,过拟合现象越严重。当训练集数据多了以后,过拟合现象逐步减弱,但数据得分与训练数据差距减少的速度随max_deep的训练集数据增大而变慢。
- max_deep=3和5,数据得分与训练数据没有相等的趋势。
2.4 K邻近算法
- 整个K邻近算法,存在一定的过拟合现象。K邻近回归算法更为明显。
2.5 贝叶斯算法
- 高斯贝叶斯算法的得分相对比较高。
- 高斯贝叶斯算法和多项式贝叶斯算法,在训练集少的时候有些过拟合趋势现象,当数据量达到150后,训练数据的得分与测试数据的得分基本保持一致。
2.6 SVM
- Kernel=sigmoid时该模型对相应数据没有作用。
- 除了Kernel=sigmoid,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降,最后得分保持一致。
- Kernel=poly时随着训练数据的增大,测试数据得分和训练数据的得分一起快速下降
- 除了Kernel=sigmoid,训练数据的得分与测试数据的得分基本保持一致。
- 不同的gamma值,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降。
- gamma越大,过拟合现象越严重。当训练数据多了以后,过拟合现象减弱,但过拟合速度随gamma的增大而变慢。
- 不同的C值,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降,最后得分基本一致。基本达到100%。
- 不同的C值对整体的测试数据得分<训练数据得分影响不大。
- Kernel=sigmoid时该模型对相应数据没有作用。
- Kernel=poly时,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据和训练数据的得分一起不断下降,但是当训练数据为450的时候,得分保持一致。
- Kernel=linear和rbf的时候,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降,最后得分保持一致。
- Kernel=poly时随着训练数据的增大,测试数据得分和训练数据的得分一起快速下降
- 除了Kernel=sigmoid,训练数据的得分与测试数据的得分基本保持一致。
- 不同的gamma值,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降。
- gamma越大,过拟合现象越严重。当训练数据多了以后,过拟合现象减弱,但过拟合速度随gamma的增大而变慢。
- 不同的C值,开始阶段测试数据得分<训练数据得分。随着训练数据的增加,测试数据得分不断上升,训练数据的得分不断下降,最后得分基本一致。
- 不同的C值对整体的测试数据得分<训练数据得分影响不大。
2.7 神经网络
整体运行速度相当慢
- 数据量少的时候,存在过拟合现象,当数据量增加,过拟合现象逐步消失,训练数据得分与测试数据得分保持一致,并且得分相对比较高。
- activation=relu与activation=identity,在训练集数据为150的时候,训练数据得分与测试数据得分保持一致
- activation=thanh与activation=logistic,训练数据为450左右,训练数据得分与测试数据得分保持一致。
- alpha在训练数据为150左右训练数据得分与测试数据得分保持一致。
- alpha变化对整个系统保持一致。
- 数据量少的时候,存在过拟合现象,当数据量增加,过拟合现象逐步消失,训练数据得分与测试数据得分保持一致,并且得分相对比较高。
- activation=relu与activation=identity,在训练集数据为150的时候,训练数据得分与测试数据得分保持一致。
- activation=thanh与activation=logistic在训练数据为150之前测试数据基本没有,训练数据到达450的时候,训练数据得分与测试数据得分基本保持一致。
- 当alpha<1的时候,随着训练样本增加训练数据得分逐步降低,测试数据逐步上升;当alpha为1的时候随着训练样本增加,训练得分和测试得分一起逐步上升,最终达成一致。
2.8 集成学习
—————————————————————————————————
顾老师课程欢迎报名
软件安全测试
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