双月数据生成及其常见算法(二)
算法部分:
數(shù)據(jù)使用:雙月數(shù)據(jù)生成及其常見算法(一)_防空洞的倉鼠的博客-CSDN博客? 文章中的數(shù)據(jù)
(一)最小二乘:
理論部分:
通過矩陣求解方式,來獲取最優(yōu)參數(shù)。具體求解B則為我們所需要的最佳解。X為對應(yīng)的數(shù)據(jù),Y是對應(yīng)的輸出。?
代碼實現(xiàn):
其中trainData是對應(yīng)的數(shù)據(jù)數(shù)據(jù),target則為對應(yīng)標簽。
#最小二乘算法def MIN2X(self, trainData,target):self.w = np.array((trainData.T*trainData).I*trainData.T*target[:,2:])print("MIN2X更新后的權(quán)重為:{}".format(self.w))(二)ML:最大似然估計
理論部分:
最大似然估計是概率論中常常涉及到的一種統(tǒng)計方法。最大似然估計會尋找關(guān)于θ的最可能的值,即在所有可能的θ取值中,尋找一個值使這個采樣的“可能性”最大化。
現(xiàn)在,我們的目標就是最大似然函數(shù):。
?最大化對數(shù)似然函數(shù),實際上就是最小化平方和誤差函數(shù),以此找到最大似然解。
根據(jù)公式推導(dǎo):最優(yōu)化解的形式為:
W(ML)? = Rxx.I(N)*Rdx(N)
其中Rxx為自相關(guān)矩陣,Rdx則為互相關(guān)矩陣。
Rxx(N) = x*x.T? ? ? ? ? ? Rdx(N) = x*d?
通過帶入X以及對應(yīng)的響應(yīng)d,則能夠得到該部分數(shù)據(jù)的ML最優(yōu)參數(shù)解。
代碼部分:
#ML算法def ML(self, TrainData, target):Rxx = TrainData.T * TrainDataRdx = TrainData.T * target[:, 2:]self.w = np.array(Rxx.I*Rdx)print("ML更新后的權(quán)重為:{}".format(self.w))(三)MAP:最大后驗估計
理論部分:最大似然估計不同的是,最大后驗估計尋求的是能使后驗概率最大的值。通常是:通過參數(shù)的先驗分布結(jié)合樣本信息得到參數(shù)的后驗分布。
本質(zhì)上不同于ML估計,MAP估計是有偏估計,ML是無偏估計。
代碼部分:
#MAP算法def MAP(self,TrainData,target):Rxx = TrainData.T*TrainDataRdx = TrainData.T*target[:,2:]self.w = np.array((Rxx+self.lamba*np.eye(len(TrainData.T))).I*Rdx)print("MAP更新后的權(quán)重為:{}".format(self.w))(四)SLP:單層感知機
理論部分:通過迭代思想,來對參數(shù)的優(yōu)化,使得求解出一組誤差較小的最優(yōu)解。
代碼部分:
def SLP(self,trainData,target):ERROR = []allNumbel = len(trainData)for i in range(self.epoch):errorNumbel = 0for x, y in zip(trainData, target):if y[2] != sign(np.dot(self.w.T, x)):errorNumbel = errorNumbel + 1self.w = self.w + self.lr * sign(y[2] - np.dot(self.w.T, x))*xERROR.append(errorNumbel/allNumbel)print("LMS更新后的權(quán)重為:{}".format(self.w))return ERROR(五)LMS:
理論部分:通過不斷迭代,尋找一組權(quán)值向量,使得預(yù)測和期望之間的誤差最小化。進而不斷地優(yōu)化參數(shù)。
E(w?)≤E(?w)
一般方法是不斷迭代使 E(w(i))<E(w(i?1)) ,如此往復(fù)直到代價函數(shù)足夠小為止。
代碼部分:
# 最小二乘算法def LMS(self, trainData, target):ERROR = []allNumbel = len(trainData)for i in range(self.epoch):errorNumbel = 0for x,y in zip(trainData,target):x = np.squeeze(x.tolist())y = np.squeeze(y.tolist())if y[2] != sign(np.dot(self.w.T, x)):errorNumbel = errorNumbel + 1err = y[2] - x.T * self.wself.w = self.w + self.lr * x * errERROR.append(errorNumbel/allNumbel)print("LMS更新后的權(quán)重為:{}".format(self.w))return ERROR結(jié)果:
?
?
?
?
?以上為僅討論線型可分情況下的類型,分類和決策平面,以及完成代碼放以下鏈接
雙月數(shù)據(jù)及其分類算法.zip-機器學(xué)習(xí)文檔類資源-CSDN下載
?
?
?
總結(jié)
以上是生活随笔為你收集整理的双月数据生成及其常见算法(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习__tsv文件写入多余空
- 下一篇: 【练习八 结构体(强化)编程题4. 看电