首页 > 分享 > 机器学习 集成方法Bagging(Python实现)

机器学习 集成方法Bagging(Python实现)

自主采样:即有放回的采样

在原数据集中经过m次有放回的随机采样,可以得到一个含m个样例的子数据集,使用这个子数据集进行训练,得到一个基学习器

我们对上述过程重复T次,就会得到T个基学习器,我们对这T个学习器的预测结果进行结合,就能够得到一个准确率更高的预测结果。一般使用简单投票的方法进行结合,即选择T个预测结果中预测最多的类,例如10次预测,其中7个预测为正类,3个预测为反类,我们就认为最终预测为正类。

我们以logistic线性回归模型为例,实现一下:

读取文件:

def load(filename):

fp = open(filename)

dataset = []

labelset = []

for i in fp.readlines():

a = i.strip().split()

dataset.append([float(j) for j in a[:len(a)-1]])

labelset.append(int(float(a[-1])))

return dataset, labelset

'

logistic线性模型(训练和测试过程):

def sigmoid(z):

return 1.0 / (1 + np.exp(-z))

def train(dataset, labelset):

data = np.mat(dataset)

label = np.mat(labelset).transpose()

w = np.ones((len(dataset[0])+1, 1))

a = np.ones((len(dataset), 1))

data = np.c_[data, a]

n = 0.001

for i in range(10000):

c = sigmoid(np.dot(data, w))

b = c - label

change = np.dot(np.transpose(data), b)

w = w - change * n

return w

def test(dataset, labelset, w):

label = []

data = np.mat(dataset)

a = np.ones((len(dataset), 1))

data = np.c_[data, a]

y = sigmoid(np.dot(data, w))

b, c = np.shape(y)

for i in range(b):

flag = -1

if y[i, 0] > 0.5:

flag = 1

else:

flag = 0

label.append(flag)

return label

'

随机选取m个样例形成子集:

def random_sampling(dataset, labelset, m):

data = []

label = []

for i in range(m):

a = random.randint(0, len(dataset) - 1)

data.append(dataset[a])

label.append(labelset[a])

return data, label

'

 20个基学习器的训练过程:

W = []

for i in range(20):

data, label = random_sampling(dataset, labelset, 150)

w = train(data, label)

W.append(w)

集成学习的测试过程:

def jicheng_test(w, test_dataset, test_labelset):

flags = []

for i in w:

flag = test(test_dataset, test_labelset, i)

flags.append(flag)

flags = np.array(flags)

a, b = np.shape(flags)

rightcount = 0

for i in range(b):

n0 = list(flags[:,i].T).count(0)

n1 = list(flags[:,i].T).count(1)

if n0 > n1:

flag_new = 0

else:

flag_new = 1

if flag_new == test_labelset[i]:

rightcount += 1

print('预测为%d,真实为%d'%(flag_new, test_labelset[i]))

print("正确率%f"%(rightcount / len(test_dataset)))

'

 通过集成的方式提高弱学习器的性能。

相关知识

Python机器学习基础教程
【机器学习】花卉识别01
如何降低数据噪声对机器学习的影响
《Python机器学习开发实战》电子书在线阅读
卷积神经网络实现鸢尾花数据分类python代码实现
python机器学习
学好Python=基础学科能力+业务知识+ IT技术
[Python机器学习]鸢尾花分类 机器学习应用
Python机器学习教程——逻辑回归
利用Python实现手写数字识别的完整指南

网址: 机器学习 集成方法Bagging(Python实现) https://m.huajiangbk.com/newsview854483.html

所属分类:花卉
上一篇: 项目过程记录
下一篇: 机器学习python集成算法