人工智能基础实践教程 习题及答案 第6章 习题_第1页
人工智能基础实践教程 习题及答案 第6章 习题_第2页
人工智能基础实践教程 习题及答案 第6章 习题_第3页
人工智能基础实践教程 习题及答案 第6章 习题_第4页
人工智能基础实践教程 习题及答案 第6章 习题_第5页
已阅读5页,还剩16页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章习题

6.1机器学习对数据集,特别是训练集有什么要求?

答:数据是机器学习的基础,通常训练集规模越大、质量越高,数据越有代表性,训练

得到的模型效果会越好。具有足够大规模和多样性的数据可以支撑复杂模型的表征能力,避

免出现过拟合现象。当样本较少时,模型会误把数据的个性(样本的独特性)当成共性(待

学习的规律),这里可以理解为“聪明的模型”不仅拟合数据中蕴含的规律,还主动去拟合那

些看似规律的噪声模式。当数据库规模增大且数据多样性提高时,样本噪声是随机的,不像

数据自身特征具有稳定性,这些随机噪声被消解掉了,不会被模型认为是统一的模式。因此,

这些随机性的干扰不会被模型作为稳定特征而学习到。

6.2试阐述分类模型选择并参数确定的一般过程。

答:候选模型的选择取决于具体的任务和已有的经验,没有统一的标准,通常需要尝试

从简单到更杂的多种模型,选择能够与训练集符合的尽可能简单的模型。在训练开始前,需

要为模型确定超参数的取值,超参数调节是机器学习中优化模型性能的关键步骤,涉及多种

方法。常见方法包括:网格搜索和随机搜索分别以系统性和随机性尝试不同超参数组合,但

可能计算成本高昂或无法保证找到最优解;贝叶斯优化利用概率模型预测超参数的效果,更

高效地指导搜索过程;手动调优依赖个人经验,而自动化机器学习(AutoML)旨在通过自

动化流程寻找最优配置;进化算法模仿自然选择过程逐步改进超参数,梯度基准化适用于可

微分的超参数优化;交叉验证用于准确评估模型泛化能力,同时需要根据任务选择合适的性

能指标。在实际应用中,通常会结合这些方法来获取最优的模型性能。

6.3有监督学习的性能评价指标如何选择?

答:常见的回归性能评价指标有误差平方和(sumofsquaresduetoerror,SSE)、均方

误差(meansquarederror,MSE)>均方根误差(rootmeansquareerror,RMSE)>平均绝对

误差(meanabsoluteerror,MAE)和决定系数(coefficientofdetermination>R2)o前四个指

标是基于拟合误差的,而决定系数是相对于输出值的均值来定义的。均方根误差容易受到少

数异常点的影响而变得过大,误差平方和与均方误差也有类似的性质。平均绝对误差具有与

预测输出值和真实值相同的量纲,比较直观。决定系数表征在因变量的变异中有多大比例可

由其关于自变量的回归模型来解释。

常见的分类性能评价指标有如下几种。

(1)准确率(Accuracy)

准确率是最常用的指标之一,特别是当类别分布基不均衡时,它可以简单地度量模型正

确分类样本的比例。

(2)精确率(Precision)和召回率(Recall)

精确率和召回率通常在面对类别不平衡或关注某个类别时使用。精确率指的是被分类器

预测为正例的样本中实际为正例的比例,而召回率指的是所有正例中被分类器正确识别出来

的比例。

(3)F1值(Fl-Score)。Fl值是综合考虑了精确率和召回率的指标,可用于比较不同

分类器的性能。

(4)AUC值

AUC是二元分类器性能的另一个重要指标,AUC是ROC曲线下的面积,反映了模型

对正反样本的区分能力。适用于处理类别不平衡问题。

6.4简述强化学习的主要分支和研究历程。

答:强化学习是一种机器学习方法,主要研究如何在一个环境中,通过不断尝试和交互

的过程,使Agent学会最优策略以达到某个目标。

强化学习发展至今,已经涌现出很多分支。其中比段重要的有以下几个。

(1)基于价值的强化学习,此类方法通过学习状态值函数或动作值函数来指导决策,

常见的算法包括Q-learning和Sarsa等。

(2)基于策略的强化学习,如策略梯度方法,此类方法直接学习策略函数,无需估计

值函数,常见的算法包括REINFORCE、Actor-Critic等c

(3)深度强化学习,此类方法将深度神经网络应用到强化学习中,以处理高维、非线

性、连续动作空间等问题,常见的算法包括DQN、DDPG、A3c等。

(4)逆强化学习,此类方法试图从专家的行为中反向推断其奖励函数,以此来理解其

行为背后的动机和目标。

(5)多Agent强化学习,此类方法研究多个Agent协同或竞争的问题,常见的算法包

括马尔可夫博弈、Multi-AgentDeepQ-Leaming(MADDPG)等。

强化学习的研究历程起源于20世纪50年代到60年代的控制理论和应用研究,随着计

算机技术的发展,强化学习开始在计算机科学领域得到广泛关注。20世纪80年代,Sutton

和Barto等人提出了经典的强化学习框架,这个框架包括马尔可夫决策过程、价值函数、策

略等概念,并提出了基于时序差分(TemporalDifference,TD)算法的Q-learning方法。之

后,强化学习在控制、游戏、智能交通、机器人等领域得到了广泛应用。近年来,随着深度

学习技术的发展,深度强化学习取得了一系列重要进展,应用于图像处理、自然语言处理、

智能对话等方面;

6.5试解释强化学习与其他机器学习方法的异同。

答:强化学习与其他机器学习方法相比有以下不同。

(1)样本提供的信息以及反馈方式不同

强化学习与有监督学习和无监督学习的学习方式不同。有监督学习通过训练数据对模型

进行有监督的学习;无监督学习则是在没有人T标签的情况下从数据中学习特征。而强化学

习不需要数据包含明确目标值或人工标签,而是通过奖励信号来反馈行为的好坏。

(2)强化学习需要权衡探索和利用

因为强化学习没有训练数据集,所以它需要在环境中进行实时交互以获得经验。这就涉

及到了探索和利用之间的权衡。探索是指尝试新的行动以更好地了解环境,而利用是指选择

目前已知最优行动以最大化奖励。其他机器学习算法通常只需要在训练过程中做出决策,而

不需要在实验环境中进行交互。

(3)强化学习适合于时间序列预测

强化学习是一种时间序列预测方法,它通过学习如何在连续时间步之间做决策来最大化

长期收益。其他机器学习算法通常对每个样本独立进行训练和预测,而不考虑时间序列中相

邻样本之间的相关性。

(4)强化学习有奖励信号

强化学习通过奖励信号来反馈行动的好坏,而其他机器学习算法通常使用损失函数或代

价函数来度量模型在训练数据上的性能。

总体而言,强化学习与其他机器学习方法区别较大,更适合解决连续的决策问题以及具

有K期奖励的任务。它需要在实践中不断探索以学习最优策略,可用于解决很多现实问题,

如机器人控制、自然语言处理等。然而,它的一个主要局限是学习过程较慢,并且对参数调

整和环境建模较为敏感。

6.6基于波士顿房价数据集,建立多元线性回归的房价预测模型,考察回归模型的性能。

该数据集是在20世纪70年代收集建立的,包括506个样本,每个样本包括13个特征和一

个房价值。数据下载地址为:

hUps:〃archive.ics.uci.edWml/machinc-learninK・dalabases/housing/housin公data。

答:Pylhon参考例程如下。已下载的housing.txt文件保存在本地文件夹中。

importnumpyasnp

importpandasaspd

importmatplotlib.pypbtaspit

fromsklearn.preprocessingimportStandardScaler

#加载数据

data=pd.read_csv("D:/教学/人工智能/编程实验/机器学习/housing.txt",

dclim_whitcspacc=Truc,hcadcr=Nonc)

data.columns=[CRIM:'ZN','INDUS','CHAS','NOX','RM'JAGE,'DIS','RAD;TAX',

'PTRATIO;*B\'LSTAT','MEDV']

#计算相关系数矩阵

rho=data.corr(mctho^'pcarson')

#绘制相关性热图

plt.figurc(1)

plt.imshow(rho,cniap='coolwann,,intcrpolation='nonc')

plt.colorbar()

plt.xticks(range(len(rho)),rho.columns,rotation=90)

plt.yticks(range(len(rho)),rho.columns)

plt.titlc('CorrclationCoefficient')

plt.xlabcl('Featurcs')

plt.ylabel('Features')

#绘制房价关于各特征的散点图

plt.figurc(2)

foriinrange(4):

forjinrange(4):

number=4*i+j+1

ifnumber>13:

break

plt.subplot(4,4,number)

plt.scatter(data[data.columns[number-1]],data('MEDV'l)

pl(.xlabel(da:a.columns[number-1])

plt.ylabel('MEDV')

plt.tight」ayout()#自动调整子图参数,使之填充整个图像区域

#将数据划分为特征和标签

X=da(a[['RM\'LSTAT']].values

Y=datal,MEDV'J.valucs

#数据归一化

scaler=StandardScalerO

X=scaler.fit_transfonn(X)

X=np.hstack((np.ones((X.shape[0],1)),X))#添加偏置项

#构建预测模型

#采用梯度下降法

plt.figure(3)

alphas=[0.001,0.003,0.007,0.01,0.05,0.1,0.2]

iterations=50

m,n=X.shape

theta=np.random.randn(n)

J_history=[]

forainrange(len(alphas)):

alpha=alphasfa]

theta=np.random.randn(n)

J=np.zcros(iterations)

foriterinrange(iterations):

H=X.dot(theta)

J[iterl=(l/(2*m))*np.sum((H-Y)**2)

gradients=(I/m)*X.T.dot(H-Y)

theta-=alpha*gradients

J_history.append(J)

plt.subplot(3,3,a+l)

plt.plot(range(iterations),J)

plt.title(f'alpha={alpha}")

plt.xlabel('Iterations')

plt-ylabclCCosf)

plt.tight」ayout()#自动调整子图参数,使之填充整个图像区域

#NormalEquation,利用正规方程计算参数值

thetaI=np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)

H=X.dot(thctal)

J_normal=(1/(2*ml)*np.suin((H-Y)**2)

#绘制目标函数散点图

plt.subplot(3,3,9)

plt.scattcr(rangc(itcrations),[J_normal]*iterations)

plt.titlcC'NormalEquation")

plt.xlabel('Iterations')

plt.ylabel('CosC)

#预测结果与真实值比较

Z=np.hstack((X[:,1:],Y.reshape(-L1)))

pll.figure(4)

plt.scatter(Y,H,color='blue')

plt.plot([min(Y),max(Y)J,[min(Y),max(Y)J,'g-')

plt.xlabel('ActualPrices')

plt.ylabel('PredictedPrices')

plt.title('ActualvsPrecictedPrices')

plt.show()

变量间相关性热图如卜。

CorrelationCoefficient

1.0

CRIM

ZN-

INDUS-

CHAS-

NOX-

TAX

PTRATIO

B

LSTAT

MEDV

NsS

Zn4

o工

N。

各变量与房价真实值分布的散点图如下。

020

NDUS

50

25

1520200400

PTRATIOB

020

LSTAT

以误差平方和作为目标函数,下图中前7个子图为学习率分别为0.001、0.003、0.007、

0.0K0.05、O.K0.2时对应的目标函数值随迭代下降过程,最后一个子图显示了最终方程

对应的目标函数值。

alpha=0.001alpha=0.003alpha=0.007

300-

280-

5

250-

2601

20402040

IterationsIterationsIterations

alpha=0.05alpha=0.1

200-tn200-

100-8100-

204002040

IterationsIterations

NormalEquation

16H

5

15-

02040

Iterations

模型拟合结果如下,蓝点为真实值,绿色直线为拟合线。

ActualvsPredictedPrices

40-

s

g

k30-

l

d

p

①

①20-

d」

io-

o-

1020304050

ActualPrices

6.7假设某数据集包括6,6,鸟三个样本,输入为X,输出为),(见下表)。对于图中

显示的三种线性回归模型,分别计算它们在数据集上的均方误差。

输入/输出值P\p2p.

答:均方误差的计算公式为

1〃

MSE=_Z(»_/5))2

其中,加•为真实值;贝刈为预测值;〃为样本数。

三种线性回归模型分别为

J(x)=2

/(x)=-x+4

〃工)=-”2

将各样本的预测值和真实值代入公式,得到三种模型的均方误差分别为

MS&=1[(2-2)2+(2―2)2+(1—2)2]=:

I4

22

MSE2=-[(2-4)+(2-2)'+(1-1)]=-

I24

222

A/SE3=-[(2-2)+(2+--2)+(l-l)]=—

。◊乙,

6.5已知如下两类样本,第1类:{(4,2)T,(2,4)T,(2,3)T,(3,6)T,(4,4)T},第2类:{(9.10尸,

(6,8)T,(*5)T,(8,7)T,(io,8)T},每个样本包括两维特征,请利用线性判别分析算法求解该分类

问题的判别函数。

答:第1步计算均值

乂£5\[2)⑷⑶⑹⑷

]_(9%4

5[10+十十+

间⑸(7、7.6

第2步计算协方差

2T.X1

4W3'3"4'34「3

+…+

43切<3.8、3.8

-0.25

-0.252.2

z(iXi)T

xwX?

T

=19、,8.410「8.4、(10、<8,4

4JO,、7.6、8M(7.6

(2.3-0.05、

一[-0.053.3>

第3步计算类间散度和类内散度

'1-().25、2.3-().05、

S=S1+S2=+

w,-0.252.2)-0.053.3,

「3.3-0.3、

",-().35.5;

SLSizX以「,力

|T

8.43、8.4、

I7.63.8,7.6,

-5.4、

(-5.4-3.8)

-3.8,

(29.1620.52、

=120.5214.44,

第4步求特征值

S,SgW=痴

同品一司=0

3.3-0.3^1'<29.1620.52、

5.5)[20.52

-0.314.44,-七

0.30450.0166Y29.1620.52、」0

0.1827^20.5214.44,=0

0.0166、01

9.2213-46.489、

4.23392.9794-乙

22-12.2007/1=0

4=0,4=12.2007

第5步求最大特征值对应的特征向量

9.22136.489、‘9.22136.489、

根据W1=OvV]和vv=12.2007%

4.23392.9794,,4.23392.9794,2

得到

0.5755]*色.9088)

=vv=

[0.8178)叫(0.4173)

6.8用线性判别分析、支持向量机和CART决策树算法分别对下表中的数据进行分类。

编号特征1带征2标签编号依征1特征2标签

110819II70

2851101580

3541112040

4811122190

512611322160

63811424320

79311516170

87211618140

答:对于二维特征,线性判别分析的思路是将数据投影到一维的新特征空间上,然后选

择一个阈值来划分样本属于哪个类别。

Python参考例程如下。

importnumpyasnp

importmatplollib.pyplolaspll

#数据初始化

data=np.array([[l0,8,5,8,12,3,9,7,11,15.20,21,22,24,16,18],

[8,5,4,1,6,8,32,7,8,4,9,16,32,17,I4J,

[1,1,1,1,1,1,1,1,0,0,0,0,0A0,0]]).T

m,n=data.shape

#绘制散点图

foriinrange(m):

ifdata[i,2]==1:

plt.plot(data[i,Oj,data|i,1],'g*',markcrsize=7)

elifdata[i,2]==0:

plt.plot(data[i,0],data[i,1],'ro',markcrsizc=7)

#计算均值向量

cenI=np.zeros(2)

cenO=np.zeros(2)

sum1=np.zeros(2)

sumO=np.zcros(2)

numl=0

nuinO=0

foriinrange(m):

ifdata[i,2]==1:

suml+=data[it:2]

numl+=1

elifdata[i,2]==0:

sumO+=data[it:2]

numO+=1

cenl=suml/num1

cenO=sumO/numO

#计算类内散度矩阵Sw和类间散度矩阵Sb

Sw=np.zeros((2,2))

Sb=np.outer(cen()-cenl,cenO-cenI)

foriinrange(m):

ifdata[i,2]==1:

Sw+=np.outer(data[i,:2]-cen1.datafi,:2]-cenl)

clifdata[i,2]==0:

Sw+=np.outer(data[i,:2]-cenO.datafi,:2]-cenO)

#计算最大特征值和特征向量

L.D=np.linalg.eig(np.linalg.inv(Sw).dot(Sb))

idx=np.argmax(np.abs(L))

k=L[idx]/D[idx,idx]

#显示投影线

xx=np.Iinspace(-5,30,40G)

yy=k*xx

plt.plot(xx,yy)

#计算投影点并显示

new_data=np.zeros((m,3))

new_data[:,0]=(k*data[:,1]+data[:,0])/(k**2+1)

new_data[:,1]=k*new_data[:,0]

new_data[:,2]=data[:,2]

foriinrangc(m):

ifnew_data[i,21==1:

plt.plot(new_data'i,0],new_data|i,11,'g+\markersize=7)

elifnew_data[i,2]==0:

ph.plot(new_dataj,0],new_da(a[i,1],Y+',markersize=7)

plt.axis([-5,30,-5,35])

plt.xlabel('x')

plt.ylabelCyt)

plt.show()

#初始化正确分类计数器

corrcct_count=0

#留一法交叉验证

foriinrange(m):

#分离出测试点和训练集

test_point=<lata[i,:]

train_data=np.dclctc(data,i,axis=0)

#重新计算均值向量

ccn1=np.zcros(2)

cenO=np.zeros(2)

sumI=np.zeros(2)

sumO=np.zeros(2)

numl=0

numO=0

forjinrangc(lcn(train_data)):

iftrain_data[j,2]==1:

sumI+=lrain_data[j,:2]

numl+=1

eliftrain_dala[j,2]==0:

sumO+=train_data|j,:2]

numO+=1

ifnuml>0:

cenl=suml/numl

ifnumO>0:

cenO=sumO/numO

#计算类间散度矩阵Sb

Sb=np.outer(cenO-cen1,cenO-cenI)

#计算类内散度矩阵Sw

Sw=np.zeros((2,2))

forjinrange(len(train_data)):

iftrain_data[j,2]==1:

Sw+=np.outer(lrain_dala[j,:2]-cenl,lrain_data[j,:2]-cenl)

eliftrain_data|j,2]==0:

Sw+=np.outer(train_data[j,:2]-cenO,train_data[j,:2]-cenO)

#计算最大特征值和特征向量

L,D=np.linalg.eig(np.linalg.inv(Sw).dot(Sb))

idx=np.argmax(np.abs(L))

k=L[idx]/D[idx,idx]

#计算投影点

projected_test_x=(k*test_point[1]+test_point[0])/(k**2+1)

projected_test_y=k*projected_test_x

#计算距离并分类

distance_to_classI=np.sqrt((projected_test_x-cenI[OJ)**2+(projected_test_y-cer.I[I])

**2)

distance_to_classO=np.sqrt((projected_test_x-cen0[0|)**2+(projected_test_y-cer.0[11)

**2)

predicted_label=0ifdislance_to_classO<distance_lo_classlelseI

#检查预测是否正确

ifpredictedjabel==test_point[2]:

correct_count+=1

#计算准确率

accuracy=correct_count/m

print("Leave-one-outcross-validationaccuracy:'1,accuracy)

样本分布和投影结果如下。对于线性判别器模型进行留-法验证的平均准确率为

93.75%o

支持向量机是一种常用的二分类模型,通过寻找具有最大间隔的分类超平面以区分不同

类别的样本。

Python参考例程如下。

importnumpyasnp

importmatplotlib.pyplotaspit

fromsklearnimportsvm

#数据和标签

data=np.array([[10,8],[8,5],[5,4],[8,1],[12,6],[3,8],[9,3],[7,2],

[U,7L[15,8],[20,4],[21,9],[22J6],124,32],[16,17],[18,14]])

labels=np.array([1J,L1,1,1,1,1,0,0,0,0,0,0,0,0])

x,y=11.5,7.5

test_data=np.array([x,y|)

#绘制数据点

plt.plot(data[:8,0],data[:8,1],'g*',label='患病')

plt.plot(data[8:,0],data[8:,1],*ro\label='不患病')

plt.plot(x,y,'b+'labe仁'新个体')

plt.legend()

plt.show()

#留•法交叉验证

traindatanum=len(data)

correcinum=0

foriiinrangc(traindatanum):

train_data=np.delete(data,ii,axis=0)

train_label=np.deleteilabels,ii)

elf=svm.SVC(kernel='linear,)

clf.fit(train_data,lrain」abel)

prcdictlabcl=clf.predict([data[ii]])[O]

ifprcdictlabcl==labcls[ii]:

correctnum+=I

accuracy=correctnum/traindatanum

print("留一法准确率:",accuracy)

#训练最终模型并绘制决策边界

elf=svm.SVC(kcrncl-linear')

clf.fit(data,labels)

#绘制决策边界

xx,yy=np.meshgrid(np.linspace(O.25,500),np.linspace(0.40,500))

Z=clf.decision_function(np.c_[xx.ravel(),yy.ravel()])

Z=Z.rcshapc(xx.shapc)

plt.contourf(xx,yy,Z,levels=[Z.min(),0,Z.max()],colors=|'red','green'],alpha=0.8)

plt.scatter(data[:8,0],data[:8,I],c='green\marker='*')

plt.scatter(data[8:,0],data[8:,1],c='red'.marker='o*)

pll.plol(x,y,'b+')

DecisionBoundarywithNewDataPoinl')

plt.xlabel('x')

plt.ylabel('y')

plt.show()

对于支持向量机模型进行留一法验证的平均准确率为81.25%。由于选择了线性核,决

策边界是线性的,分类结果如下。

SVMDecisionBoundarywithNewDataPoint

40

35

30

25

x20

15

10

5

0

0510152025

x

CART决策树是一种基于树结构的分类模型,通过递归地将数据集划分为子集并在每个

子集上重复进行决策来分类。

Python参考例程如下。

importnumpyasnp

importmatplotlib.pyplolaspit

fromsklearn.treeimportDecisionTreeClassifier

fromsklearn.model_selectionimporttrain_tesl_split

#设置中文字体

plt.rcParams['font.sans-serif]=['SimHei']#用黑体显示中文

plt.rcParams['axes.unicode_minus'l=False#解决负号显示为方块的问题

#数据和标签

data=np.array([[10,8],[8,5],[5,4],[8,I],[12,6],[3,8],[9,3],[7,2],

[11,7],[15,8],[20,4],[21,9],[22,16],[24,32],[16,17],[18,14]])

label=np.array([l,1,1,1,I,1,1,1,0,0,0,0,0,0,0,0])

x,y=11.5,7.5

tcst_data=np.array([x,y])#新个体的坐标

#绘制数据点

plt.plot(data[:8,0],data[:8,1],'g+',Obel='患病')

plt.plot(data[8:,0],data[8:,1],To',label='不患病')

plt.plot(x,y,'b*',label='新个体')

pll.legend()

#计算训练数据的数目

(raindatanum=len(data)//2

corrcctnuni=0

#交叉验证

fbriiinrangc(traindatanum):

test_data=datafii]

tcst_labcl=labcl[ii]

train_data=np.delete(data,ii,axis=0)

trainjabel=np.deleteilabel,ii)

elf=DecisionTreeClassifier()

c1f.fit(train_data,trainjabel)

predictlabel=clf.predict([test_data])[0]

ifpredictlabel==testjabel:

correctnum+=1

accuracy=correctnum/trandatanum

print("Accuracy:",accuracy)

#重新训练模型并绘制决策边界

elf=DecisionTreeClassifier()

clf.fit(data,label)

fig,ax=plt.subplots()

ax.plot(data[:8,0],data[:8,I],'gs;label='患病')

ax.plot(data[8:,0],data[8:,I],To;label:'不患病')

xx,yy=np.meshgrid(np.arange(O,25,1),np.arange(0.40,1))

Z=cir.predici(np.c_[xx.ravel(),yy.ravel()J)

Z=Z.reshapc(xx.shapc)

ax.con(ourf(xx,yy,Z,alpha=0.3)

plt.xlabel('x')

plt.ylabel('y')

plt.show()

对于CART决策树进行留一法验证的平均准确率为87.5%。决策边界如下。

6.9用支持向量机方法构建判断肿瘤是良性还是恶性的分类器,样本特征为肿瘤体积和

患者年龄。已知训练集如下表所示,标签为1表示该样本为良性,标签为0表示该样本为

恶性。

序

123456789101112131415

号

肿

瘤

体1.141.181.21.261.31.281.241.361.381.381.381.41.481.541.56

积

媪

年

龄/535956€05960525249555751555562

岁

标

111111000000000

签

答:程序基本流程如卜.:

1)导入必要的库:导入numpy用于数组操作,svm模块用于支持向量机分类器,以及

LeaveOneOut用于留一法交叉验证。

2)定义数据和标签:定义给定的数据和对应的标签。

3)创建SVM分类器:使用线性核函数创建一个SVM分类器。

4)留一法交叉验证:使用LeaveOneOut进行留一法交叉验证。对于每一个训练/测试分

割,训练模型并进行预测,然后检查预测结果是否与实际标签一致。如果一致,则增加止确

计数。

5)计算准确率:计算并打印留一法交叉验证的准确率。

Python例程如卜。

importnumpyasnp

fromsklearnimportsvm

fromsklearn.model_selectionimportLeaveOneOut

importmatplotlib.pyplotaspit

#数据和标签

data=np.array([[1.14,53],[1.18,59],[1.2,56],[1.26,60],[1.3,59],[1.28,60],[1.24,52],|1.36,

52],[1.38,491,(1.38.55],[1,38,57],[1.4,511,(1.48,55],[1.54,55],[1.56,62]])

labels=np.arrayd1J,1,1,1,1,0,0,0,0,0,0,0,0,0])

#创建SVM分类器

elf=svm.SVC(kernel-linear')

#留一法交叉验证

loo=LcavcOncOut()

correct_count=0

fortrain_index,test_indexinloo.split(data):

X_train,X_tes(=data[(rain_index],dala[test_index]

y_train,y_tcst=labclsltrainjndcx],labcls[tcst_indcx]

#训练模型

clf.fit(X_train,y_train)

#预测测试点

prediction=clf.prcdict(X_tcst)

#检查预测是否正确

ifprediction==y_test:

correct_count+=1

#计算准确率

accuracy=correct_count/len(data)

print("Leave-one-outcross-validationaccuracy:",accuracy)

#绘制数据点和决策边界

plt.figure(figsize=(8,6))

#绘制数据点

class_l_points=data[labels==1]

class_0_points=da(a|labels==U|

plt.scatter(class_l_points(:,0],class_l_points[:,1],color='blue',maiker=,o',label='Class1')

plt.scatter(class_0_points[:,0J,class_0_points[:»I],color='red',marker=*x\label-ClassO')

#获取网格点用于绘制决策边界

xx,yy=np.meshgrid(np.linspace(1.1,1.6,500),np.linspace(45,65,5(X)))

Z=clf.decision_function(np.c_[xx.ravel(),yy.ravcl()])

Z=Z.reshape(xx.shape)

#绘制决策边界

plt.contour(xx,yy,Z,levels=[O],colors=*k\linestyles--1)

#设置图例和标题

plt.legend()

pll.title('SVMClassificationwithDecisionBoundary')

plt.xlabel('Feature1')

plt.ylabel('Feature2')

plt.show()

采用线性支持向量机构建模型,留一法的平均分类准确率为73.33%。分类边界如卜、

SVMClassificationwithDecisionBoundary

65.0-

62.5-

60.0-

55

7.

工

N

出

250

我

20.

55

7.

50

45

45.0।----------------------1----------------------1----------------------1----------------------

1.11.21.31.41.51.6

Feature1

6.10某银行的历史贷款记录包括用户的4种特征(年龄、银行流水、婚姻状况和房产

状况)以及是否给予贷款,用ID3决策树算法建立是否给予贷款的分类模型,用于辅助决

策者。银行的历史贷款记录如下表所示。

序号年龄银行流水是否结婚拥有房产是否给予贷款

1>30高否是否

2>30高否否否

320〜30高否是是

4<20中否是是

5<20低否是是

6<20低

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论