本系列以书中源码为主,稍作修改并添加注释,均实际运行可行。为免后来者踩坑,特此公开!欢迎打赏!
转载请注明出处!
#coding:gbk
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
#作用:载入数据
#输入:无
#输出:数据矩阵,标签向量
#stump:树桩
def loadSimpData():
datMat = matrix([[1.,2.1],[2.,1.1],[1.3,1.],[1.,1.],[2.,1.]])
classLabels = [1.0,1.0,-1.0,-1.0,1.0]
return datMat,classLabels
#作用:通过阈值比较对数据进行分类
#输入:数据矩阵,维度,阈值,阈值不平等性(即关系符)
#输出:返回分类后的标签列表
def stumpClassify(dataMatrix,dimen,threshVal,threshIneq):
retArray = ones((shape(dataMatrix)[0],1))#构建m*1矩阵,m为dataMatrix第二维的长度,即行数
#下面一步的意义在于,数据的类别有两类,
#通过在阈值左右两边分别采用这两种类别来判断哪一种分类使得错误率更低。详情见下一函数
if threshIneq == 'lt':#小于等于情况(第一遍)
retArray[dataMatrix[:,dimen] <= threshVal] = -1.0
else:#大于情况(第二遍)
retArray[dataMatrix[:,dimen] >threshVal] = -1.0
return retArray
#遍历stumpClassify函数所有的可能输入值,并且对每一层特征值生成单层决策树,
#然后从中挑选出最佳的单层决策树
#输入:数据集,类标签向量,数据权值向量
#输出:最佳单层决策树的相关信息,最小错误率,最佳预测结果
def buildStump(dataArr,classLabels,D):
dataMatrix = mat(dataArr)#可计算化
labelMat = mat(classLabels).T#可计算化并转置
m,n = shape(dataMatrix)#获取矩阵各维度的值,此处为行数和列数
#numSteps:步数;bestStump保存最佳单层决策树的相关信息;
#bestClasEst:最佳预测结果
numSteps = 10.0;bestStump ={
};