人工智能基礎實踐教程 習題及答案 第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

提交評論