专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

机器学习十大算法案例

  机器学习十大算法与案例实现监督学习1。线性回归2。逻辑回归3。神经网络4。SVM支持向量机5。K邻近6。贝叶斯7。决策树8。集成学习(Adaboost)非监督学习9。降维主成分分析10。聚类分析监督学习1。线性回归
  梯度下降一元线性回归importnumpyasnpimportmatplotlib。pyplotasplt载入数据datanp。genfromtxt(data。csv,delimiter,)xdatadata〔:,0〕ydatadata〔:,1〕学习率learningratelr0。0001截距b0斜率k0最大迭代次数epochs50最小二乘法defcomputeerror(b,k,xdata,ydata):totalError0foriinrange(0,len(xdata)):totalError(ydata〔i〕(kxdata〔i〕b))2returntotalErrorfloat(len(xdata))2。0defgradientdescentrunner(xdata,ydata,b,k,lr,epochs):计算总数据量mfloat(len(xdata))循环epochs次foriinrange(epochs):bgrad0kgrad0计算梯度的总和再求平均forjinrange(0,len(xdata)):bgrad(1m)(((kxdata〔j〕)b)ydata〔j〕)kgrad(1m)xdata〔j〕(((kxdata〔j〕)b)ydata〔j〕)更新b和kbb(lrbgrad)kk(lrkgrad)returnb,kprint(Startingb{0},k{1},error{2}。format(b,k,computeerror(b,k,xdata,ydata)))print(Running。。。)b,kgradientdescentrunner(xdata,ydata,b,k,lr,epochs)print(After{0}iterationsb{1},k{2},error{3}。format(epochs,b,k,computeerror(b,k,xdata,ydata)))画图plt。plot(xdata,ydata,b。)plt。plot(xdata,kxdatab,r)plt。show()
  梯度下降法多元线性回归importnumpyasnpfromnumpyimportgenfromtxtimportmatplotlib。pyplotaspltfrommpltoolkits。mplot3dimportAxes3D读入数据datagenfromtxt(rDelivery。csv,delimiter,)切分数据xdatadata〔:,:1〕ydatadata〔:,1〕学习率learningratelr0。0001参数theta00theta10theta20最大迭代次数epochs1000最小二乘法defcomputeerror(theta0,theta1,theta2,xdata,ydata):totalError0foriinrange(0,len(xdata)):totalError(ydata〔i〕(theta1xdata〔i,0〕theta2xdata〔i,1〕theta0))2returntotalErrorfloat(len(xdata))defgradientdescentrunner(xdata,ydata,theta0,theta1,theta2,lr,epochs):计算总数据量mfloat(len(xdata))循环epochs次foriinrange(epochs):theta0grad0theta1grad0theta2grad0计算梯度的总和再求平均forjinrange(0,len(xdata)):theta0grad(1m)((theta1xdata〔j,0〕theta2xdata〔j,1〕theta0)ydata〔j〕)theta1grad(1m)xdata〔j,0〕((theta1xdata〔j,0〕theta2xdata〔j,1〕theta0)ydata〔j〕)theta2grad(1m)xdata〔j,1〕((theta1xdata〔j,0〕theta2xdata〔j,1〕theta0)ydata〔j〕)更新b和ktheta0theta0(lrtheta0grad)theta1theta1(lrtheta1grad)theta2theta2(lrtheta2grad)returntheta0,theta1,theta2print(Startingtheta0{0},theta1{1},theta2{2},error{3}。format(theta0,theta1,theta2,computeerror(theta0,theta1,theta2,xdata,ydata)))print(Running。。。)theta0,theta1,theta2gradientdescentrunner(xdata,ydata,theta0,theta1,theta2,lr,epochs)print(After{0}iterationstheta0{1},theta1{2},theta2{3},error{4}。format(epochs,theta0,theta1,theta2,computeerror(theta0,theta1,theta2,xdata,ydata)))axplt。figure()。addsubplot(111,projection3d)ax。scatter(xdata〔:,0〕,xdata〔:,1〕,ydata,cr,markero,s100)点为红色三角形x0xdata〔:,0〕x1xdata〔:,1〕生成网格矩阵x0,x1np。meshgrid(x0,x1)ztheta0x0theta1x1theta2画3D图ax。plotsurface(x0,x1,z)设置坐标轴ax。setxlabel(Miles)ax。setylabel(NumofDeliveries)ax。setzlabel(Time)显示图像plt。show()
  2。逻辑回归
  逻辑回归原理与推导
  梯度下降法逻辑回归importmatplotlib。pyplotaspltimportnumpyasnpfromsklearn。metricsimportclassificationreportfromsklearnimportpreprocessing数据是否需要标准化scaleTrue载入数据datanp。genfromtxt(LRtestSet。csv,delimiter,)xdatadata〔:,:1〕ydatadata〔:,1〕defplot():x0〔〕x1〔〕y0〔〕y1〔〕切分不同类别的数据foriinrange(len(xdata)):ifydata〔i〕0:x0。append(xdata〔i,0〕)y0。append(xdata〔i,1〕)else:x1。append(xdata〔i,0〕)y1。append(xdata〔i,1〕)画图scatter0plt。scatter(x0,y0,cb,markero)scatter1plt。scatter(x1,y1,cr,markerx)画图例plt。legend(handles〔scatter0,scatter1〕,labels〔label0,label1〕,locbest)plot()查看数据plt。show()
  数据处理,添加偏置项xdatadata〔:,:1〕ydatadata〔:,1,np。newaxis〕print(np。mat(xdata)。shape)print(np。mat(ydata)。shape)给样本添加偏置项Xdatanp。concatenate((np。ones((100,1)),xdata),axis1)defsigmoid(x):return1。0(1np。exp(x))defcost(xMat,yMat,ws):leftnp。multiply(yMat,np。log(sigmoid(xMatws)))rightnp。multiply(1yMat,np。log(1sigmoid(xMatws)))returnnp。sum(leftright)(len(xMat))defgradAscent(xArr,yArr):ifscaleTrue:xArrpreprocessing。scale(xArr)xMatnp。mat(xArr)yMatnp。mat(yArr)lr0。001epochs10000costList〔〕计算数据行列数行代表数据个数,列代表权值个数m,nnp。shape(xMat)初始化权值wsnp。mat(np。ones((n,1)))foriinrange(epochs1):xMat和weights矩阵相乘hsigmoid(xMatws)计算误差wsgradxMat。T(hyMat)mwswslrwsgradifi500:costList。append(cost(xMat,yMat,ws))returnws,costList训练模型,得到权值和cost值的变化ws,costListgradAscent(Xdata,ydata)print(ws)ifscaleFalse:画图决策边界plot()xtest〔〔4〕,〔3〕〕ytest(ws〔0〕xtestws〔1〕)ws〔2〕plt。plot(xtest,ytest,k)plt。show()画图loss值的变化xnp。linspace(0,10000,201)plt。plot(x,costList,cr)plt。title(Train)plt。xlabel(Epochs)plt。ylabel(Cost)plt。show()
  预测defpredict(xdata,ws):ifscaleTrue:xdatapreprocessing。scale(xdata)xMatnp。mat(xdata)wsnp。mat(ws)return〔1ifx0。5else0forxinsigmoid(xMatws)〕predictionspredict(Xdata,ws)print(classificationreport(ydata,predictions))
  梯度下降法非线性逻辑回归importmatplotlib。pyplotaspltimportnumpyasnpfromsklearn。metricsimportclassificationreportfromsklearnimportpreprocessingfromsklearn。preprocessingimportPolynomialFeatures数据是否需要标准化scaleFalse载入数据datanp。genfromtxt(LRtestSet2。txt,delimiter,)xdatadata〔:,:1〕ydatadata〔:,1,np。newaxis〕defplot():x0〔〕x1〔〕y0〔〕y1〔〕切分不同类别的数据foriinrange(len(xdata)):ifydata〔i〕0:x0。append(xdata〔i,0〕)y0。append(xdata〔i,1〕)else:x1。append(xdata〔i,0〕)y1。append(xdata〔i,1〕)画图scatter0plt。scatter(x0,y0,cb,markero)scatter1plt。scatter(x1,y1,cr,markerx)画图例plt。legend(handles〔scatter0,scatter1〕,labels〔label0,label1〕,locbest)plot()plt。show()
  定义多项式回归,degree的值可以调节多项式的特征polyregPolynomialFeatures(degree3)特征处理xpolypolyreg。fittransform(xdata)defsigmoid(x):return1。0(1np。exp(x))defcost(xMat,yMat,ws):leftnp。multiply(yMat,np。log(sigmoid(xMatws)))rightnp。multiply(1yMat,np。log(1sigmoid(xMatws)))returnnp。sum(leftright)(len(xMat))defgradAscent(xArr,yArr):ifscaleTrue:xArrpreprocessing。scale(xArr)xMatnp。mat(xArr)yMatnp。mat(yArr)lr0。03epochs50000costList〔〕计算数据列数,有几列就有几个权值m,nnp。shape(xMat)初始化权值wsnp。mat(np。ones((n,1)))foriinrange(epochs1):xMat和weights矩阵相乘hsigmoid(xMatws)计算误差wsgradxMat。T(hyMat)mwswslrwsgradifi500:costList。append(cost(xMat,yMat,ws))returnws,costList训练模型,得到权值和cost值的变化ws,costListgradAscent(xpoly,ydata)print(ws)获取数据值所在的范围xmin,xmaxxdata〔:,0〕。min()1,xdata〔:,0〕。max()1ymin,ymaxxdata〔:,1〕。min()1,xdata〔:,1〕。max()1生成网格矩阵xx,yynp。meshgrid(np。arange(xmin,xmax,0。02),np。arange(ymin,ymax,0。02))np。r按row来组合array,np。c按colunm来组合arrayanp。array(〔1,2,3〕)bnp。array(〔5,2,5〕)np。r〔a,b〕array(〔1,2,3,5,2,5〕)np。c〔a,b〕array(〔〔1,5〕,〔2,2〕,〔3,5〕〕)np。c〔a,〔0,0,0〕,b〕array(〔〔1,0,5〕,〔2,0,2〕,〔3,0,5〕〕)zsigmoid(polyreg。fittransform(np。c〔xx。ravel(),yy。ravel()〕)。dot(np。array(ws)))ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据foriinrange(len(z)):ifz〔i〕0。5:z〔i〕1else:z〔i〕0zz。reshape(xx。shape)等高线图csplt。contourf(xx,yy,z)plot()plt。show()
  预测defpredict(xdata,ws):ifscaleTrue:xdatapreprocessing。scale(xdata)xMatnp。mat(xdata)wsnp。mat(ws)return〔1ifx0。5else0forxinsigmoid(xMatws)〕predictionspredict(xpoly,ws)print(classificationreport(ydata,predictions))
  3。神经网络
  神经网络4。SVM支持向量机
  SVM非线性importmatplotlib。pyplotaspltimportnumpyasnpfromsklearn。metricsimportclassificationreportfromsklearnimportsvm载入数据datanp。genfromtxt(LRtestSet2。txt,delimiter,)xdatadata〔:,:1〕ydatadata〔:,1〕defplot():x0〔〕x1〔〕y0〔〕y1〔〕切分不同类别的数据foriinrange(len(xdata)):ifydata〔i〕0:x0。append(xdata〔i,0〕)y0。append(xdata〔i,1〕)else:x1。append(xdata〔i,0〕)y1。append(xdata〔i,1〕)画图scatter0plt。scatter(x0,y0,cb,markero)scatter1plt。scatter(x1,y1,cr,markerx)画图例plt。legend(handles〔scatter0,scatter1〕,labels〔label0,label1〕,locbest)plot()plt。show()fitthemodelC和gammamodelsvm。SVC(kernelrbf)model。fit(xdata,ydata)model。score(xdata,ydata)获取数据值所在的范围xmin,xmaxxdata〔:,0〕。min()1,xdata〔:,0〕。max()1ymin,ymaxxdata〔:,1〕。min()1,xdata〔:,1〕。max()1生成网格矩阵xx,yynp。meshgrid(np。arange(xmin,xmax,0。02),np。arange(ymin,ymax,0。02))zmodel。predict(np。c〔xx。ravel(),yy。ravel()〕)ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据zz。reshape(xx。shape)等高线图csplt。contourf(xx,yy,z)plot()plt。show()
  5。K邻近
  主要过程
  导入算法包以及数据集importnumpyasnpfromsklearnimportdatasetsfromsklearn。modelselectionimporttraintestsplitfromtqdm。notebookimporttqdmfromsklearn。metricsimportclassificationreport,confusionmatriximportoperatorimportrandomdefknn(xtest,xdata,ydata,k):计算样本数量xdatasizexdata。shape〔0〕复制xtestnp。tile(xtest,(xdatasize,1))计算xtest与每一个样本的差值diffMatnp。tile(xtest,(xdatasize,1))xdata计算差值的平方sqDiffMatdiffMat2求和sqDistancessqDiffMat。sum(axis1)开方distancessqDistances0。5从小到大排序sortedDistancesdistances。argsort()classCount{}foriinrange(k):获取标签votelabelydata〔sortedDistances〔i〕〕统计标签数量classCount〔votelabel〕classCount。get(votelabel,0)1根据operator。itemgetter(1)第1个值对classCount排序,然后再取倒序sortedClassCountsorted(classCount。items(),keyoperator。itemgetter(1),reverseTrue)获取数量最多的标签returnsortedClassCount〔0〕〔0〕载入数据irisdatasets。loadiris()打乱数据datasizeiris。data。shape〔0〕index〔iforiinrange(datasize)〕random。shuffle(index)iris。datairis。data〔index〕iris。targetiris。target〔index〕切分数据集testsize40xtrainiris。data〔testsize:〕xtestiris。data〔:testsize〕ytrainiris。target〔testsize:〕ytestiris。target〔:testsize〕分类predictions〔〕foriintqdm(range(xtest。shape〔0〕)):predictions。append(knn(xtest〔i〕,xtrain,ytrain,5))评估targetnames〔class0,class1,class2〕print(classificationreport(ytest,predictions,targetnamestargetnames))
  6。贝叶斯
  设每个数据样本用一个n维特征向量来描述n个属性的值,即:X{x1,x2,,xn},假定有m个类,分别用C1,C2,,Cm表示。给定一个未知的数据样本X(即没有类标号),若朴素贝叶斯分类法将未知的样本X分配给类Ci,则一定是
  P(CiX)P(CjX)1jm,jifromsklearn。naivebayesimportGaussianNBfromsklearn。modelselectionimporttraintestsplitfromsklearn。metricsimportaccuracyscorefromsklearn。preprocessingimportLabelEncoderimportpandasaspdfromnumpyimportimportoperator计算高斯分布密度函数的值defcalculategaussianprobability(mean,var,x):coeff(1。0(math。sqrt((2。0math。pi)var)))exponentmath。exp((math。pow(xmean,2)(2var)))ccoeffexponentreturnc计算均值defaveragenum(num):nsum0foriinrange(len(num)):nsumnum〔i〕returnnsumlen(num)计算方差defvar(list,avg):var10foriinlist:var1float((iavg)2)var2(math。sqrt(var1(len(list)1。0)))returnvar2朴素贝叶斯分类模型defNaivebeys(splitData,classset,test):classify〔〕forsinrange(len(test)):c{}foriinclassset:splitdatasplitData〔i〕numlen(splitdata)munum2characterlen(splitdata〔0〕)1具体数据集,个数有变classp〔〕forjinrange(character):zi1ifisinstance(splitdata〔0〕〔j〕,(int,float)):numlist〔example〔j〕forexampleinsplitdata〕Meanaveragenum(numlist)Varvar(numlist,Mean)acalculategaussianprobability(Mean,Var,test〔s〕〔j〕)else:forlinrange(num):iftest〔s〕〔j〕splitdata〔l〕〔j〕:zi1azimuclassp。append(a)zhi1forkinrange(character):zhiclassp〔k〕c。setdefault(i,zhi)sortasorted(c。items(),keyoperator。itemgetter(1),reverseTrue)classify。append(sorta〔0〕〔0〕)returnclassify评估defaccuracy(y,ypred):yarrarray(y)ypredarrarray(ypred)yarryarr。reshape(yarr。shape〔0〕,1)ypredarrypredarr。reshape(ypredarr。shape〔0〕,1)returnsum(yarrypredarr)len(yarr)数据处理defsplitDataset(dataSet):按照属性把数据划分classList〔example〔1〕forexampleindataSet〕classSetset(classList)splitDir{}foriinclassSet:forjinrange(len(dataSet)):ifdataSet〔j〕〔1〕i:splitDir。setdefault(i,〔〕)。append(dataSet〔j〕)returnsplitDir,classSetopen(test。txt)dfpd。readcsv(test。txt)classleLabelEncoder()dataSetdf。values〔:,:〕datasettrain,datasettesttraintestsplit(dataSet,testsize0。1)splitDatasettrain,classSettrainsplitDataset(datasettrain)classSettest〔example〔1〕forexampleindatasettest〕ypredNaivebeys(splitDatasettrain,classSettrain,datasettest)accuaccuracy(classSettest,ypred)print(Accuracy:,accu)
  Accuracy:0。65
  7。决策树
  决策树的分类模型是树状结构,简单直观,比较符合人类的理解方式。决策树分类器的构造不需要任何领域知识和参数设置,适合于探索式知识的发现。由于决策树分类步骤简单快速,而且一般来说具有较高的准确率,因此得到了较多的使用。
  数据集介绍
  本实验采用西瓜数据集,根据西瓜的几种属性判断西瓜是否是好瓜。数据集包含17条记录,数据格式如下:
  实验
  首先我们引入必要的库:importpandasaspdfrommathimportlog2frompylabimportimportmatplotlib。pyplotasplt
  导入数据
  读取csv文件中的数据记录并转为列表defloaddataset():数据集文件所在位置path。西瓜。csvdatapd。readcsv(path,header0)dataset〔〕foraindata。values:dataset。append(list(a))返回数据列表attributelist(data。keys())返回数据集和每个维度的名称returndataset,attributedataset,attributeloaddataset()attribute,dataset(〔色泽,根蒂,敲声,纹理,脐部,触感,好瓜〕,〔〔青绿,蜷缩,浊响,清晰,凹陷,硬滑,是〕,〔乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,是〕,〔乌黑,蜷缩,浊响,清晰,凹陷,硬滑,是〕,〔青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是〕,〔浅白,蜷缩,浊响,清晰,凹陷,硬滑,是〕,〔青绿,稍蜷,浊响,清晰,稍凹,软粘,是〕,〔乌黑,稍蜷,浊响,稍糊,稍凹,软粘,是〕,〔乌黑,稍蜷,浊响,清晰,稍凹,硬滑,是〕,〔乌黑,稍蜷,沉闷,稍糊,稍凹,硬滑,否〕,〔青绿,硬挺,清脆,清晰,平坦,软粘,否〕,〔浅白,硬挺,清脆,模糊,平坦,硬滑,否〕,〔浅白,蜷缩,浊响,模糊,平坦,软粘,否〕,〔青绿,稍蜷,浊响,稍糊,凹陷,硬滑,否〕,〔浅白,稍蜷,沉闷,稍糊,凹陷,硬滑,否〕,〔乌黑,稍蜷,浊响,清晰,稍凹,软粘,否〕,〔浅白,蜷缩,浊响,模糊,平坦,硬滑,否〕,〔青绿,蜷缩,沉闷,稍糊,稍凹,硬滑,否〕〕)
  计算信息熵defcalculateinfoentropy(dataset):记录样本数量nlen(dataset)记录分类属性数量attributecount{}遍历所有实例,统计类别出现频次forattributeindataset:每一个实例最后一列为类别属性,因此取最后一列classattributeattribute〔1〕如果当前类标号不在labelcount中,则加入该类标号ifclassattributenotinattributecount。keys():attributecount〔classattribute〕0类标号出现次数加1attributecount〔classattribute〕1infoentropy0forclassattributeinattributecount:计算该类在实例中出现的概率pfloat(attributecount〔classattribute〕)ninfoentropyplog2(p)returninfoentropy
  数据集划分defsplitdataset(dataset,i,value):splitset〔〕forattributeindataset:ifattribute〔i〕value:删除该维属性reduceattributeattribute〔:i〕reduceattribute。extend(attribute〔i1:〕)splitset。append(reduceattribute)returnsplitset
  计算属性划分数据集的熵defcalculateattributeentropy(dataset,i,values):attributeentropy0forvalueinvalues:subdatasetsplitdataset(dataset,i,value)plen(subdataset)float(len(dataset))attributeentropypcalculateinfoentropy(subdataset)returnattributeentropy
  计算信息增益defcalculateinfogain(dataset,infoentropy,i):第i维特征列表attribute〔example〔i〕forexampleindataset〕转为不重复元素的集合valuesset(attribute)attributeentropycalculateattributeentropy(dataset,i,values)infogaininfoentropyattributeentropyreturninfogain
  根据信息增益进行划分defsplitbyinfogain(dataset):描述属性数量attributenumlen(dataset〔0〕)1整个数据集的信息熵infoentropycalculateinfoentropy(dataset)最高的信息增益maxinfogain0最佳划分维度属性bestattribute1foriinrange(attributenum):infogaincalculateinfogain(dataset,infoentropy,i)if(infogainmaxinfogain):maxinfogaininfogainbestattributeireturnbestattribute
  构造决策树defcreatetree(dataset,attribute):类别列表classlist〔example〔1〕forexampleindataset〕统计类别classlist〔0〕的数量ifclasslist。count(classlist〔0〕)len(classlist):当类别相同则停止划分returnclasslist〔0〕最佳划分维度对应的索引bestattributesplitbyinfogain(dataset)最佳划分维度对应的名称bestattributenameattribute〔bestattribute〕tree{bestattributename:{}}del(attribute〔bestattribute〕)查找需要分类的特征子集attributevalues〔example〔bestattribute〕forexampleindataset〕valuesset(attributevalues)forvalueinvalues:subattributeattribute〔:〕tree〔bestattributename〕〔value〕createtree(splitdataset(dataset,bestattribute,value),subattribute)returntreetreecreatetree(dataset,attribute)tree{纹理:{清晰:{根蒂:{蜷缩:是,硬挺:否,稍蜷:{色泽:{青绿:是,乌黑:{触感:{软粘:否,硬滑:是}}}}}},模糊:否,稍糊:{触感:{软粘:是,硬滑:否}}}}定义划分属性节点样式attributenodedict(boxstyleround,color00B0F0)定义分类属性节点样式classnodedict(boxstylecircle,color00F064)定义箭头样式arrowdict(arrowstyle,color000000)计算叶结点数defgetnumleaf(tree):numLeafs0firstStrlist(tree。keys())〔0〕secondDicttree〔firstStr〕forkeyinsecondDict。keys():iftype(secondDict〔key〕)。namedict:numLeafsgetnumleaf(secondDict〔key〕)else:numLeafs1returnnumLeafs计算树的层数defgetdepthtree(tree):maxDepth0firstStrlist(tree。keys())〔0〕secondDicttree〔firstStr〕forkeyinsecondDict。keys():iftype(secondDict〔key〕)。namedict:thisDepth1getdepthtree(secondDict〔key〕)else:thisDepth1ifthisDepthmaxDepth:maxDepththisDepthreturnmaxDepth绘制文本框defplottext(cntrPt,parentPt,txtString):xMid(parentPt〔0〕cntrPt〔0〕)2。0cntrPt〔0〕yMid(parentPt〔1〕cntrPt〔1〕)2。0cntrPt〔1〕createPlot。ax1。text(xMid,yMid,txtString,vacenter,hacenter,rotation30)
  绘制树结构defplotTree(tree,parentPt,nodeTxt):numLeafsgetnumleaf(tree)depthgetdepthtree(tree)firstStrlist(tree。keys())〔0〕cntrPt(plotTree。xOff(1。0float(numLeafs))2。0plotTree。totalW,plotTree。yOff)plottext(cntrPt,parentPt,nodeTxt)在父子结点间绘制文本框并填充文本信息plotNode(firstStr,cntrPt,parentPt,attributenode)绘制带箭头的注释secondDicttree〔firstStr〕plotTree。yOffplotTree。yOff1。0plotTree。totalDforkeyinsecondDict。keys():iftype(secondDict〔key〕)。namedict:plotTree(secondDict〔key〕,cntrPt,str(key))else:plotTree。xOffplotTree。xOff1。0plotTree。totalWplotNode(secondDict〔key〕,(plotTree。xOff,plotTree。yOff),cntrPt,classnode)plottext((plotTree。xOff,plotTree。yOff),cntrPt,str(key))plotTree。yOffplotTree。yOff1。0plotTree。totalD绘制箭头defplotNode(nodeTxt,centerPt,parentPt,nodeType):createPlot。ax1。annotate(nodeTxt,xyparentPt,xycoordsaxesfraction,xytextcenterPt,textcoordsaxesfraction,vacenter,hacenter,bboxnodeType,arrowpropsarrow)绘图defcreatePlot(tree):figplt。figure(1,facecolorwhite)fig。clf()axpropsdict(xticks〔〕,yticks〔〕)createPlot。ax1plt。subplot(111,frameonFalse,axprops)plotTree。totalWfloat(getnumleaf(tree))plotTree。totalDfloat(getdepthtree(tree))plotTree。xOff0。5plotTree。totalW;plotTree。yOff1。0;plotTree(tree,(0。5,1。0),)plt。show()指定默认字体mpl。rcParams〔font。sansserif〕〔SimHei〕mpl。rcParams〔axes。unicodeminus〕False绘制决策树createPlot(tree)
  8。集成学习(Adaboost)
  集成学习(EnsembleLearning),就是使用一系列学习器进行学习,并使用某种规则将各个学习器的结果进行整合,从而获得比单个学习器效果更好的学习效果的一种方法。
  集成学习的条件
  通过集成学习提高分类器的整体泛化能力有以下两个条件:基分类器之间具有差异性。如果使用的是同一个分类器集成,集成分类器的性能是不会有提升的。每个基分类器的分类精度必须大于0。5。如下图所示,当基分类器精度小于0。5时,随着集成规模的增加,分类集成分类器的分类精度会下降;但是如果基分类器的精度大于0。5时,集成分类器的最终分类精度是趋近于1的。
  集成学习的两个关键点:如何构建具有差异性的基分类器如何对基分类器的结果进行整合
  构建差异性分类器一般有以下三种方法:通过处理数据集生成差异性分类器通过处理数据特征构建差异性分类器对分类器的处理构建差异性分类器
  集成学习常见的三种元算法是Bagging,Boosting和Stacking。Bagging用于提升机器学习算法的稳定性和准确性。Boosting主要用于减少bias(偏差)和variance(方差),是将一个弱分类器转化为强分类器的算法。Stacking是一种组合多个模型的方法。
  Boosting与AdaBoost算法的训练
  Boosting分类方法,其过程如下所示:
  1)先通过对N个训练数据的学习得到第一个弱分类器h1;
  2)将h1分错的数据和其他的新数据一起构成一个新的有N个训练数据的样本,通过对这个样本的学习得到第二个弱分类器h2;
  3)将h1和h2都分错了的数据加上其他的新数据构成另一个新的有N个训练数据的样本,通过对这个样本的学习得到第三个弱分类器h3;
  4)最终经过提升的强分类器hfinalMajorityVote(h1,h2,h3)。即某个数据被分为哪一类要通过h1,h2,h3的多数表决。
  上述Boosting算法,存在两个问题:
  如何调整训练集,使得在训练集上训练弱分类器得以进行。
  如何将训练得到的各个弱分类器联合起来形成强分类器。
  针对以上两个问题,AdaBoost算法进行了调整:
  使用加权后选取的训练数据代替随机选取的训练数据,这样将训练的焦点集中在比较难分的训练数据上。
  将弱分类器联合起来时,使用加权的投票机制代替平均投票机制。让分类效果好的弱分类器具有较大的权重,而分类效果差的分类器具有较小的权重。importnumpyasnpimportmatplotlib。pyplotaspltfromsklearnimporttreefromsklearn。ensembleimportAdaBoostClassifierfromsklearn。treeimportDecisionTreeClassifierfromsklearn。datasetsimportmakegaussianquantilesfromsklearn。metricsimportclassificationreport生成2维正态分布,生成的数据按分位数分为两类,500个样本,2个样本特征x1,y1makegaussianquantiles(nsamples500,nfeatures2,nclasses2)生成2维正态分布,生成的数据按分位数分为两类,400个样本,2个样本特征均值都为3x2,y2makegaussianquantiles(mean(3,3),nsamples500,nfeatures2,nclasses2)将两组数据合成一组数据xdatanp。concatenate((x1,x2))ydatanp。concatenate((y1,y21))plt。scatter(xdata〔:,0〕,xdata〔:,1〕,cydata)plt。show()
  决策树模型modeltree。DecisionTreeClassifier(maxdepth3)输入数据建立模型model。fit(xdata,ydata)获取数据值所在的范围xmin,xmaxxdata〔:,0〕。min()1,xdata〔:,0〕。max()1ymin,ymaxxdata〔:,1〕。min()1,xdata〔:,1〕。max()1生成网格矩阵xx,yynp。meshgrid(np。arange(xmin,xmax,0。02),np。arange(ymin,ymax,0。02))zmodel。predict(np。c〔xx。ravel(),yy。ravel()〕)ravel与flatten类似,多维数据转一维。flatten不会改变原始数据,ravel会改变原始数据zz。reshape(xx。shape)等高线图csplt。contourf(xx,yy,z)样本散点图plt。scatter(xdata〔:,0〕,xdata〔:,1〕,cydata)plt。show()
  模型准确率model。score(xdata,ydata)0。777AdaBoost模型modelAdaBoostClassifier(DecisionTreeClassifier(maxdepth3),nestimators10)训练模型model。fit(xdata,ydata)获取数据值所在的范围xmin,xmaxxdata〔:,0〕。min()1,xdata〔:,0〕。max()1ymin,ymaxxdata〔:,1〕。min()1,xdata〔:,1〕。max()1生成网格矩阵xx,yynp。meshgrid(np。arange(xmin,xmax,0。02),np。arange(ymin,ymax,0。02))获取预测值zmodel。predict(np。c〔xx。ravel(),yy。ravel()〕)zz。reshape(xx。shape)等高线图csplt。contourf(xx,yy,z)样本散点图plt。scatter(xdata〔:,0〕,xdata〔:,1〕,cydata)plt。show()
  模型准确率model。score(xdata,ydata)
  0。976
  总结一下,组合算法(combineralgorithm)使用所有其他算法的预测作为附加输入(additionalinputs)来训练得到最终的预测结果。理论上可以表示任何一种组合学习方法(ensembletechniques);实际中,单层的逻辑回归模型(singlelayerlogisticregressionmodel)通常被用作组合器(combiner)。
  非监督学习
  9。降维主成分分析
  importnumpyasnpimportmatplotlib。pyplotasplt载入数据datanp。genfromtxt(data。csv,delimiter,)xdatadata〔:,0〕ydatadata〔:,1〕plt。scatter(xdata,ydata)plt。show()print(xdata。shape)
  数据中心化defzeroMean(dataMat):按列求平均,即各个特征的平均meanValnp。mean(dataMat,axis0)newDatadataMatmeanValreturnnewData,meanValnewData,meanValzeroMean(data)np。cov用于求协方差矩阵,参数rowvar0说明数据一行代表一个样本covMatnp。cov(newData,rowvar0)协方差矩阵covMatarray(〔〔94。99190951,125。62024804〕,〔125。62024804,277。49520751〕〕)np。linalg。eig求矩阵的特征值和特征向量eigVals,eigVectsnp。linalg。eig(np。mat(covMat))特征值eigValsarray(〔30。97826888,341。50884814〕)特征向量eigVectsmatrix(〔〔0。89098665,0。45402951〕,〔0。45402951,0。89098665〕〕)对特征值从小到大排序eigValIndicenp。argsort(eigVals)eigValIndicearray(〔0,1〕,dtypeint64)top1最大的n个特征值的下标neigValIndiceeigValIndice〔1:(top1):1〕neigValIndicearray(〔1〕,dtypeint64)最大的n个特征值对应的特征向量neigVecteigVects〔:,neigValIndice〕neigVectmatrix(〔〔0。45402951〕,〔0。89098665〕〕)低维特征空间的数据lowDDataMatnewDataneigVectlowDDataMat利用低纬度数据来重构数据reconMat(lowDDataMatneigVect。T)meanValreconMat载入数据datanp。genfromtxt(data。csv,delimiter,)xdatadata〔:,0〕ydatadata〔:,1〕plt。scatter(xdata,ydata)重构的数据xdatanp。array(reconMat)〔:,0〕ydatanp。array(reconMat)〔:,1〕plt。scatter(xdata,ydata,cr)plt。show()
  10。聚类分析
  续集等下篇文章!
  素材来源于网络,若有侵权联系删除!

闪耀五大联赛的五大中超旧将阿瑙托维奇居首,金玟哉在列前些年中超烧钱的时候,网罗了一大批世界顶尖的射手。随着中超变革,这些外援纷纷转投他处,其中不少来到了欧洲五大联赛,有部分人还在五大联赛踢出了名堂。下面盘点一下闪耀五大联赛的五大中超NASAArtemisI延期至5或6日发射如若错过将要等到10月据悉,NASAArtemisI可能有机会尝试在美当地时间9月5日和6日发射,但如若错过该时间,那么它将不得不返回装配大楼,直到10月。NASA在一份关于发射失败的声明中说道发射主管宇宙有没有边界?如果有,边界之外又是什么?宇宙有没有边缘,是什么样的,宇宙之外呢?停一下,或许我们得从宇宙膨胀说起,以便于理解这些问题的答案。爱因斯坦在1915年时提出了广义相对论,这个理论革命性地取代了牛顿的万有引力定律在金星上寻找生命需要准备什么?金星上的生命,或者它的可能性,一直是最近的热门话题。存在很多争议,包括(仍然存在争议的)磷化氢的发现,磷化氢是大气中的一种潜在生物标志物。平息这场争论的最好方法是去那里实际收集样本发明创造的故事(156)荷兰科学家发现超导体荷兰科学家发现超导体卡末林昂内斯1911年,荷兰莱顿大学教授卡末林昂内斯意外地发现,将汞冷却到4。2K(268。95)时,汞的电阻突然消失后来他又发现许多金属和合金都具有与上述汞相欧冠精彩1夜!大巴黎力克尤文皇马曼城大胜切尔西爆冷输球北京时间9月7日,欧冠小组赛首轮第一比赛日结束,大巴黎在焦点大战中21力克尤文,皇马曼城都轻松取胜,AC米兰战平,切尔西爆冷输球。萨格勒布10切尔西E组,切尔西客场爆冷01负于萨格77!巴黎迎接新风貌,加尔蒂送礼姆巴佩,梅西成大赢家,创纪录导读关于巴黎圣日耳曼,球迷关注的焦点,从赛场上球员的表现,到更衣室氛围是否稳定,事无巨细,而梅西以及内马尔深处其中,才是吸引球迷眼光的原因所在。在日前的比赛中,梅西依旧坐稳首发,而宁德时代八连跌,创上市以来纪录,新能源还能涨吗?1宁德时代连续第8个交易日下挫,为上市以来首次!新能源汽车龙头宁德时代已经连续8个交易日下跌了,同时这也是宁德时代上市以来首次那么长时间的下跌。大头觉得这是有机构在做空的结果。不过欧冠战火重燃,球员积分再现江湖2223赛季的欧冠小组赛将于本周中开战,相信每个球队的球迷都看到了欧冠小组抽签的结果,最劲爆的莫过于C组巴萨拜仁国米和比尔森胜利的组合,对于比尔森胜利来说,踢的每一场比赛都是一种享巴黎圣日耳曼VS尤文图斯今非昔比,大巴黎26年后再复仇一比赛故事巴黎圣日耳曼即将在欧冠联赛中迎战尤文图斯,在1996年的欧洲超级杯上,斑马军团以两回合92的总比分痛击巴黎并且夺冠,之后这两家欧洲豪门就再也没有在正式比赛有过任何交手记录NBA新赛季急需证明自己的五位球员,特别是第二位第一位沃尔,沃尔近几年一直事高薪低能的代表,休赛期被火箭买断加入快船以后和伦纳德乔治组成三巨头,如果沃尔能发挥80的实力,那么快船都将是总冠军的最有力争夺者,但如果沃尔没能很好的梳
湖人4笔交易11出9入,两大顽疾终解决,佩林卡一战封神!文水清清一年一度的赛中交易画上休止符,西部大乱斗中,湖人共计完成4笔交易,11出9入大换血过后,球队两大顽疾终解决,被诟病两个赛季的佩林卡可谓一战封神。佩林卡为詹眉终于完成超级补强泣血控诉!二十年火蜜三千字长文历数塞拉斯五宗罪!120140输给国王之后,火箭队战绩来到13胜41负,依旧是联盟倒一的存在。输球不可怕,可怕的是,看不到未来!今年是火箭摆烂的第三年。三年以来,塞拉斯除了在摆烂胜率上符合要求,在其快船三笔交易太给力最终15人名单无惧太阳戈登合同含冠军条款头条创作挑战赛北京时间2月10日,洛杉矶快船队压哨完成了三笔交易,第一笔交易是火箭快船灰熊三方交易,快船得到戈登3个次轮签灰熊得到卢克肯纳德火箭得到沃尔丹尼格林。随后就曝出火箭队将脱乌入俄8年后,克里米亚老百姓的日子变好了吗?这里是克里米亚首府辛菲洛普的中央车站,过去热闹的市中心,如今看起来却相当冷清。克里米亚的铁路交通过去四通八达,可以到俄罗斯的莫斯科,也可以到乌克兰的基辅,甚至到波兰的华沙,不过在2火箭403万换两个二轮签,斯通想挽救加鲁巴和托弗,谢谢你戈登火箭正式官宣了和老鹰的交易。交易截止日前休斯顿记者凯利艾科没有爆料有球队想要交易得到马修斯和费尔南多。这两人在火箭都打不上主力,没有多少交易价值,斯通自然也不会指望他们能换回优质筹1换6!6换1!勇士偷梁换柱,16人大名单出炉,卫冕之路危机四伏NBA赛季中期交易截止日落下帷幕,联盟各队疯狂出手,让人大呼过瘾。据统计,在最后13个小时里,联盟共完成了16笔交易。一切尘埃落定,太阳湖人独行侠等多支球队重新迈入争冠行列,而爵士正则表达式注意事项摘要使用正则表达式时需要清楚使用到的引擎,根据不同的场景,可以选择不同的引擎(ThompsonNFADFA等)常用的jsjavapython等使用的是递归回溯NFA,容易出现极大的手机性能过剩,还用骁龙870合适吗?绝对值得如果您喜欢,可以点击上面的关注二字。后续会为您提供更多有价值的内容。现在的安卓手机阵营十分强大了,各大手机厂商竞相角逐,处理器不再是唯一标准了,如今的安卓机随便一个正常使用三五年毫一加首款平板终于来了,却是海外特供?别伤心,等等国内OPPOPad22月7日,一加在国内和印度都举行了新品发布会,不过在印度的发布会上,除了有国内已经发布的一加11和一加11R(对应国内的一加Ace2)外,还带来了旗下首款平板电脑一加平板和键盘等新这是真的吗?当火爆全网的ChatGPT遇上青白江近几日,一款名为ChatGPT的人工智能工具彻底火出了圈无论是改论文敲代码写文案还是陪聊天貌似无所不能让网友们直呼只有你想不到,没有ChatGPT办不成的ChatGPT到底是啥?C墨菲和英格拉姆做队友很棒,别告诉他我很敬仰他鹈鹕主场131126战胜湖人。赛后,鹈鹕球员特雷墨菲接受了记者的采访。谈到和布兰登英格拉姆做队友的感受,墨菲说很棒。英格拉姆让我的比赛变得轻松多了,我就是很享受和他一起打球。英格拉
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网