版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單元1任務(wù)1.1
機(jī)器學(xué)習(xí)任務(wù)1.11.引入相關(guān)模塊os庫(kù)是Python標(biāo)準(zhǔn)庫(kù),包含幾百個(gè)函數(shù),常用的是路徑操作、進(jìn)程管理、環(huán)境參數(shù)類型。os就是“operatingsystem”的縮寫,os模塊提供的就是各種Python程序與操作系統(tǒng)進(jìn)行交互的接口。使用os模塊,一方面,可以方便地與操作系統(tǒng)qq進(jìn)行交互;另一方面,可以極大地增強(qiáng)代碼的可移植性。NumPy(NumericalPython)是Python語(yǔ)言的一個(gè)擴(kuò)展程序庫(kù),支持大量的維度數(shù)組與矩陣運(yùn)算,也針對(duì)數(shù)組運(yùn)算提供大量的數(shù)學(xué)函數(shù)庫(kù)。代碼如下:importosimportnumpyasnp類用來(lái)描述具有相同屬性和方法的對(duì)象的集合。它定義了該集合中每個(gè)對(duì)象所共有的屬性和方法。對(duì)象是類的實(shí)例。1)重寫構(gòu)造函數(shù)2.定義Banknotes類任務(wù)1.1classBanknotes:
def__init__(self,feature_dir):
self.feature_dir=feature_dir#特征文件的路徑
self.features=None#特征值2)定義加載模型的方法任務(wù)1.1defload_model(self):
ifos.path.exists(self.feature_dir):
withopen(self.feature_dir,'r')asf:
line=f.readline().strip()
self.features=np.array(list(map(float,line.split(','))))
returnTrue
else:
path='/'.join(self.feature_dir.split('/')[:-1])
ifnotos.path.exists(path):
os.mkdir('model')
returnFalse04模型訓(xùn)練3)定義加載數(shù)據(jù)集的方法defload_dataset(self,dataset_path):
ifos.path.exists(dataset_path):#判斷數(shù)據(jù)集文件是否存在
withopen(dataset_path,'r')asf:#打開數(shù)據(jù)集文件
lines=f.readlines()#按行讀取所有數(shù)據(jù)
np.random.shuffle(lines)#按行打亂順序
train_inputs=[]#訓(xùn)練數(shù)據(jù)輸入
train_lables=[]#訓(xùn)練數(shù)據(jù)標(biāo)簽
test_inputs=[]#測(cè)試數(shù)據(jù)輸入
test_labels=[]#測(cè)試數(shù)據(jù)標(biāo)簽
forlineinlines[:int(len(lines)*0.8)]:#遍歷前80%的數(shù)據(jù),將其解析并放入訓(xùn)練集,每行前4個(gè)數(shù)據(jù)作為輸入數(shù)據(jù),最后1個(gè)數(shù)據(jù)作為標(biāo)簽
line_array=line.strip().split(',')
train_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#數(shù)據(jù)
train_lables.append(int(line_array[4]))
forlineinlines[int(len(lines)*0.2):]:#遍歷后20%的數(shù)據(jù),將其解析并放入測(cè)試集,每行前4個(gè)數(shù)據(jù)作為輸入,最后1個(gè)數(shù)據(jù)作為標(biāo)簽
line_array=line.strip().split(',')
test_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#數(shù)據(jù)
test_labels.append(int(line_array[4]))
#臨時(shí)保存訓(xùn)練集和驗(yàn)證集
self.train_dataset,self.test_dataset=[train_inputs,train_lables],[test_inputs,test_labels]04模型訓(xùn)練3)定義加載數(shù)據(jù)集的方法defload_dataset(self,dataset_path):
ifos.path.exists(dataset_path):#判斷數(shù)據(jù)集文件是否存在
withopen(dataset_path,'r')asf:#打開數(shù)據(jù)集文件
lines=f.readlines()#按行讀取所有數(shù)據(jù)
np.random.shuffle(lines)#按行打亂順序
train_inputs=[]#訓(xùn)練數(shù)據(jù)輸入
train_lables=[]#訓(xùn)練數(shù)據(jù)標(biāo)簽
test_inputs=[]#測(cè)試數(shù)據(jù)輸入
test_labels=[]#測(cè)試數(shù)據(jù)標(biāo)簽04模型訓(xùn)練3)定義加載數(shù)據(jù)集的方法forlineinlines[:int(len(lines)*0.8)]:#遍歷前80%的數(shù)據(jù),將其解析并放入訓(xùn)練集,每行前4個(gè)數(shù)據(jù)作為輸入數(shù)據(jù),最后1個(gè)數(shù)據(jù)作為標(biāo)簽
line_array=line.strip().split(',')
train_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#數(shù)據(jù)
train_lables.append(int(line_array[4]))04模型訓(xùn)練forlineinlines[int(len(lines)*0.2):]:#遍歷后20%的數(shù)據(jù),將其解析并放入測(cè)試集,每行前4個(gè)數(shù)據(jù)作為輸入,最后1個(gè)數(shù)據(jù)作為標(biāo)簽
line_array=line.strip().split(',')
test_inputs.append([1.0,float(line_array[0]),float(line_array[1]),float(line_array[2]),float(line_array[3])])#數(shù)據(jù)
test_labels.append(int(line_array[4]))
#臨時(shí)保存訓(xùn)練集和驗(yàn)證集
self.train_dataset,self.test_dataset=[train_inputs,train_lables],[test_inputs,test_labels]3)定義加載數(shù)據(jù)集的方法04模型訓(xùn)練4)定義sigmoid函數(shù)/方法sigmoid函數(shù)是常見的S型函數(shù),也被稱為S型生長(zhǎng)曲線,由于其具有單調(diào)遞增、反函數(shù)單調(diào)遞增等性質(zhì),因此其常被用作神經(jīng)網(wǎng)絡(luò)的閾值函數(shù),將變量映射到0與1之間。函數(shù)的原型為sigmoid函數(shù)的圖像04模型訓(xùn)練#sigmoid函數(shù)即得分函數(shù),用于計(jì)算數(shù)據(jù)x的概率是0還是1。#若得到的y大于0.5,則概率是1;若得到的y小于或等于0.5,則概率是0
defsigmoid(self,x):
return1/(1+np.exp(-x))4)定義sigmoid函數(shù)/方法04模型訓(xùn)練5)定義代價(jià)函數(shù)/方法代價(jià)函數(shù),也叫損失函數(shù),它在機(jī)器學(xué)習(xí)的每種算法中都很重要,因?yàn)橛?xùn)練模型的過(guò)程就是優(yōu)化代價(jià)函數(shù)的過(guò)程,代價(jià)函數(shù)對(duì)每個(gè)參數(shù)的偏導(dǎo)數(shù)就是梯度下降算法中提到的梯度,為防止過(guò)擬合而添加的正則化項(xiàng)也是加在代價(jià)函數(shù)后面的。#代價(jià)函數(shù),hx是概率估計(jì)值,也是由sigmoid(x)得來(lái)的值;y是樣本真值
defcost(self,hx,y):
return-y*np.log(hx)-(1-y)*np.log(1-hx)04模型訓(xùn)練6)定義梯度下降算法微分單變量的微分,函數(shù)只有一個(gè)變量時(shí)多變量的微分,當(dāng)函數(shù)有多個(gè)變量的時(shí)候,即分別對(duì)每個(gè)變量進(jìn)行求微分04模型訓(xùn)練6)定義梯度下降算法梯度實(shí)際上就是多變量微分的一般化梯度就是分別對(duì)每個(gè)變量進(jìn)行微分,然后用逗號(hào)分割開,梯度是用<>包括起來(lái),說(shuō)明梯度其實(shí)一個(gè)向量。在單變量的函數(shù)中,梯度其實(shí)就是函數(shù)的微分,代表著函數(shù)在某個(gè)給定點(diǎn)的切線的斜率在多變量函數(shù)中,梯度是一個(gè)向量,向量有方向,梯度的方向就指出了函數(shù)在給定點(diǎn)的上升最快的方向。梯度的方向是函數(shù)在給定點(diǎn)上升最快的方向,那么梯度的反方向就是函數(shù)在給定點(diǎn)下降最快的方向04模型訓(xùn)練6)定義梯度下降算法此公式的意義是:J是關(guān)于Θ的一個(gè)函數(shù),我們當(dāng)前所處的位置為Θ0點(diǎn),要從這個(gè)點(diǎn)走到J的最小值點(diǎn)。首先我們先確定前進(jìn)的方向,也就是梯度的反向,然后走一段距離的步長(zhǎng),也就是α,走完這個(gè)段步長(zhǎng),就到達(dá)了Θ1這個(gè)點(diǎn)。04模型訓(xùn)練6)定義梯度下降算法#梯度下降,x是輸入數(shù)據(jù),y是標(biāo)簽集,learning_rate是學(xué)習(xí)率
defgradient(self,x,y,learning_rate):
m=len(y)#計(jì)算標(biāo)簽集的長(zhǎng)度
matrix_gradient=np.zeros(len(x[0]))#創(chuàng)建一個(gè)全0的梯度列表
foriinrange(m):#遍歷輸入數(shù)據(jù)與標(biāo)簽集,計(jì)算梯度
current_x=x[i]
current_y=y[i]
current_x=np.asarray(current_x)#輸入特征轉(zhuǎn)換為Numpy數(shù)組,計(jì)算預(yù)測(cè)值(通過(guò)sigmoid函數(shù))
matrix_gradient+=(self.sigmoid(np.dot(self.features,current_x))-current_y)*current_x#計(jì)算梯度公式(預(yù)測(cè)值-真實(shí)值)*輸入特征
self.features=self.features-learning_rate*matrix_gradient#遵循梯度下降原則,更新特征數(shù)據(jù)04模型訓(xùn)練7)定義誤差計(jì)算函數(shù)
模型的輸出結(jié)果和其對(duì)應(yīng)的真實(shí)值之間往往會(huì)存在一些差異,這些差異稱為該模型的輸出誤差,簡(jiǎn)稱誤差。誤差函數(shù)是用來(lái)計(jì)算實(shí)際和預(yù)測(cè)的差別的。訓(xùn)練誤差是指模型在訓(xùn)練集上的平均損失,測(cè)試誤差是指模型在測(cè)試集上的平均損失。訓(xùn)練誤差的大小對(duì)判斷給定的問(wèn)題是不是一個(gè)容易學(xué)習(xí)的問(wèn)題具有一定意義,但其本質(zhì)上不重要。測(cè)試誤差反映了學(xué)習(xí)方法對(duì)未知的測(cè)試集的預(yù)測(cè)能力,是學(xué)習(xí)中的重要概念。機(jī)器學(xué)習(xí)在訓(xùn)練模型時(shí),都會(huì)把樣本集分為訓(xùn)練集和測(cè)試集。其中,訓(xùn)練集用來(lái)完成算法模型的學(xué)習(xí)和訓(xùn)練,而測(cè)試集用來(lái)評(píng)估訓(xùn)練好的模型對(duì)于數(shù)據(jù)的預(yù)測(cè)性能。此時(shí)要考慮評(píng)估的性能是否合理。04模型訓(xùn)練7)定義誤差計(jì)算函數(shù)#誤差計(jì)算,x是輸入數(shù)據(jù),y是標(biāo)簽集,返回平均誤差
deferror(self,x,y):
total=len(y)
error_num=0#初始化錯(cuò)誤計(jì)數(shù)變量
foriinrange(total):
current_x=x[i]#將當(dāng)前樣本的特征值賦值給current_x
current_y=y[i]#將當(dāng)前樣本的標(biāo)簽賦值給current_y
hx=self.sigmoid(np.dot(self.features,current_x))#LR算法
ifself.cost(hx,current_y)>0.5:#進(jìn)一步計(jì)算損失
比較損失與閾值0.5的大小,判斷是否預(yù)測(cè)錯(cuò)誤
error_num+=1
returnerror_num/total04模型訓(xùn)練8)定義訓(xùn)練函數(shù)#訓(xùn)練函數(shù),learning_rate是學(xué)習(xí)率,num_iter是迭代次數(shù)
deftrain(self,learning_rate,num_iter):
[train_inputs,train_lables]=self.train_dataset#獲取訓(xùn)練輸入數(shù)據(jù)和標(biāo)簽
n=len(train_inputs[0])
self.features=np.ones(n)#初始化特征值
dataMat=np.asarray(train_inputs)#將輸入數(shù)據(jù)和標(biāo)簽轉(zhuǎn)為numpy數(shù)組
labelMat=np.asarray(train_lables)
foriinrange(num_iter+1):
self.gradient(dataMat,labelMat,learning_rate)#梯度下降算法
ifi%10==0:#每10輪計(jì)算1次誤差,打印當(dāng)前數(shù)據(jù)
err=self.error(dataMat,labelMat)
print(f‘迭代次數(shù):{i:<6}誤差值:{err:<20}’)
withopen(self.feature_dir,‘w’)asf:#保存特征數(shù)據(jù)
feature=[str(f)forfinself.features]
f.writelines(','.join(feature))04模型訓(xùn)練8)定義測(cè)試函數(shù)deftest(self,test_dataset=None,show=False):
[test_inputs,test_labels]=test_dataset
total=len(test_labels)
error_num=0
right_num=0
forti,tlinzip(test_inputs,test_labels):#遍歷測(cè)試集
#統(tǒng)計(jì)測(cè)試結(jié)果,如果預(yù)測(cè)值與真值相同,則準(zhǔn)確數(shù)據(jù)+1;如果預(yù)測(cè)值與真值不同,則錯(cuò)誤數(shù)據(jù)+1
if(np.dot(np.array(ti),self.features.T)<0.5andtl==0)or(np.dot(np.array(ti),self.fea
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度電子合同法律效力認(rèn)定及證據(jù)保全操作規(guī)程3篇
- 二零二五年度汽車銷售與售后服務(wù)咨詢合同2篇
- 二零二五年鋼筋制作與安裝勞動(dòng)合同規(guī)范3篇
- 二零二五版企業(yè)品牌形象策劃執(zhí)行合同3篇
- 二零二五年度工傷事故賠償協(xié)議及后續(xù)心理咨詢服務(wù)合同6篇
- 二零二五年度電梯產(chǎn)品研發(fā)與創(chuàng)新基金投資合同3篇
- 二零二五年度蜜蜂養(yǎng)殖環(huán)境監(jiān)測(cè)與改善合同2篇
- 小麥種子繁育生產(chǎn)合同(2篇)
- 二零二五年電子商務(wù)SET協(xié)議安全技術(shù)實(shí)施合同3篇
- 二零二五年智能工廠生產(chǎn)過(guò)程監(jiān)控合同樣本3篇
- 2024年采購(gòu)代發(fā)貨合作協(xié)議范本
- 2024年業(yè)績(jī)換取股權(quán)的協(xié)議書模板
- 顳下頜關(guān)節(jié)疾?。谇活M面外科學(xué)課件)
- 工業(yè)自動(dòng)化設(shè)備維護(hù)保養(yǎng)指南
- 2024人教新版七年級(jí)上冊(cè)英語(yǔ)單詞英譯漢默寫表
- 《向心力》參考課件4
- 2024至2030年中國(guó)膨潤(rùn)土行業(yè)投資戰(zhàn)略分析及發(fā)展前景研究報(bào)告
- 2024年深圳中考數(shù)學(xué)真題及答案
- 土方轉(zhuǎn)運(yùn)合同協(xié)議書
- Module 3 Unit 1 Point to the door(教學(xué)設(shè)計(jì))-2024-2025學(xué)年外研版(三起)英語(yǔ)三年級(jí)上冊(cè)
- 智能交通信號(hào)燈安裝合同樣本
評(píng)論
0/150
提交評(píng)論