有用请点赞,没用请差评。
欢迎分享本文,转载请保留出处。
目前程序的训练部分分类器部分没有问题,但是最后的predict部分还存在点问题,一直没有找出来,等有时间了再来修改吧。
采用的数据集:github:https://github.com/Tomator01/-Machine-Learning
# -*- coding:utf-8 -*-
# AdaBoost算法
# author:Tomator
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import cv2
import time
import math
class AdaBoost(object):
def __init__(self, epsilon=0.0):
# 暂时没有加上epsilon,也可以加上
self.epsilon = epsilon # 分类误差率阈值
self.w = None # 样本的权值,每加入一个基本分类器都要重新计算
self.N = None
self.alpha = [] # 基本分类器前面的系数
def init_param(self, X_data):
# 初始化参数,包括权值和所有可能的弱分类器
self.N = X_data.shape[0] #训练数据样本数
self.features_n=X_data.shape[1] #特征维度数
self.w = np.ones(self.N) / self.N # 初始化权值
self.M = 10 #最大弱分类器数目
self.classifier = [] # (维度,分类器),针对当前维度的分类器
def _Z_(self,index,classifier,X_data,y_data):
'''
公式8.5
Z是规范化因子
'''
Z = 0
for i in range(self.N):
Z += self._w_(index,classifier,i,X_data,y_data)
return Z
def _w_(self,index,classifier,i,X_data,y_data):
return self.w[i] * math.exp(-self.alpha[-1] * y_data[i] * class