在贴代码之前,必须说明的是:本代码是博主用于学习的,实现效果实在不理想。代码只是初步实现了BP和adaBoost的结合,但是经多次检测,adaBoost并没有做到优化分类效果,错误率与仅仅使用BP相同。这可能是在代码的实现过程里,分类标签是1和0所造成的(如果是1和-1可能情况有改善)。不过这只是博主的推测。总而言之,代码实现了大概85%的正确率。想要进一步学习或研究代码的,代码就请拿去用吧。对于实验数据,其实网上有很多,很容易找来然后改动代码,加以使用
#coding:utf-8
'''结合ADABOOST和BP的算法实现分类'''
import numpy as np
from numpy import *
import pandas as pd
import matplotlib.pyplot as plt
def loadDataSet(filename):
dataMat=[]
classLabels=[]
fr=open(filename)
for line in fr.readlines():
lineArr=line.strip().split(',')
dataMat.append([float(lineArr[0]),float(lineArr[1])])
classLabels.append(int(lineArr[-1]))
return mat(dataMat),mat(classLabels).T
X,classLabels=loadDataSet('F:\coursera_homework\machine-learning-ex2\ex2\ex2data2.txt')
y=classLabels
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def result(h):
result=[1 if t>=0.5 else 0 for t in h]
return mat(result).T
def forward_propagate(X, theta1, theta2):
m = X.shape[0]
a1 = np.insert(X, 0, values=np.ones(m), axis=1)
z2 = a1 * theta1.T
a2 = np.insert(sigmoid(z2), 0, values=np.ones(m), axis=1)
z3 = a2 * theta2.T
h = sigmoid(z3)