学习笔记 - SVM&集成学习

10.18学习笔记 - SVM&集成学习

10.18复习了决策树实现过程和思想原理,学习了支持向量机和集成学习部分思想

一、复习决策树

  • 必须掌握
    • 分类树:
      • 评判法则(分割依据)
        • entropy 信息熵
        • gini 基尼系数
      • 输出:
        • vote 思想(投票机制)
    • 回归树
      • 评判法则(分割依据)
        • mse 均方误差
        • var 方差
      • 输出:
        • mean 均值思想

二、支持向量机

支持向量机由于其本身的性质在深度学习年代已经被淘汰,所以仅浅学其思想和代码实现作为了解

1.关于支持向量机

  • 小数据、少特征时代的王者
  • 有着高计算代价和高理论难度(凸优化)
  • 有着相对较高的预测精度
from sklearn.svm import SVC
from sklearn.svm import SVR

from sklearn.datasets import load_iris
from sklearn.datasets import load_boston

from sklearn.model_selection import train_test_split

import numpy as np

"""
	分类问题

"""
X, y = load_iris(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.15, random_state=1)

svc = SVC()
svc.fit(X=X_train,y=y_train)
svc.predict(X=X_test)
# output:array([0, 1, 1, 0, 2, 1, 2, 0, 0, 2, 1, 0, 2, 1, 1, 0, 1, 1, 0, 0, 1, 1,
       2])
svc.score(X=X_test,y=y_test)
# output:0.9565217391304348

三、 模型汇总

  • 分类模型:
    • KNN,贝叶斯,决策树,支持向量机
  • 回归模型:
    • KNN,决策树,支持向量机
  • 聚类模型:
    • KMeans

所有的算法都是野蛮计算

  • Q:为什么有这么多模型
  • A:每一种算法都是基于不同的假设,以及不同的理论出发点建立的,使用的前提条件就是根据他的假设相吻合的,工作中全试一遍

四、框架&编程语言

框架相对于编程语言就是将常见的算法封装到了一起,解决了重复劳动的问题,方便快速查找

  • Q:是否不适用于出现交集的类别
  • A:会的,自然场景肯定会出现,可以使用软间隔,允许中间一部分出错,交集可以映射到其他维度,通过核函数计算(核技巧)

核函数:将低维空间数据映射到高维空间以求解

1.不同算法比较

# 这里是人为制造了一些假数据方便测试
from sklearn.datasets import make_classification
from sklearn.datasets import make_regression
from sklearn.model_selection import train_test_split
import time
import numpy as np

"""
	生成数据(八分类问题)
	- make_classification()
			n_informative 有用的特征
			n_redundant 没用的特征
			n_classes 类别

"""
X, y = make_classification(n_samples=10000, n_features=20, n_informative=5, n_classes=8, random_state=1)

"""
	测试样本概率

"""
n_samples = [np.sum(y == i) for i in set(y)]
p = n_samples / np.sum(n_samples)
print(p)
# op:[0.1249 0.1243 0.1247 0.1264 0.1246 0.1243 0.126  0.1248]

"""
	数据分割

"""
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

(a)KNN分类测试
'''
    KNN 分类测试
'''
from sklearn.neighbors import KNeighborsClassifier

knn = KNeighborsClassifier(n_neighbors=5)

start_train = time.time()

knn.fit(X=X_train, y=y_train)

stop_train = time.time()

# 模型预测
score = knn.score(X=X_test, y=y_test)

stop_eval = time.time()

print(f'KNN 模型:准确率:{score} 训练耗时:{stop_train - start_train}秒; 推理耗时{stop_eval - stop_train}')

KNN 模型:准确率:0.5565 训练耗时:0.0019998550415039062秒; 推理耗时0.3070235252380371

  • Q:模型准确率为0.55说明模型很差吗?
  • A:不,再次强调,数据本身没有可比性,八分类问题中概率为0.125,KNN实际已经将准确率提高到了4.5倍左右
(b)高斯贝叶斯
'''
    高斯贝叶斯 分类测试
'''
from sklearn.naive_bayes import GaussianNB
# from sklearn.decomposition import PCA

# pca = PCA(n_components=5)
# pca.fit(X=X_train)
# X_train = pca.transform(X_train)
# X_test = pca.transform(X_test)


NB = GaussianNB()

start_train = time.time()

NB.fit(X=X_train, y=y_train)

stop_train = time.time()

# 模型预测
score = NB.score(X=X_test, y=y_test)

stop_eval = time.time()

print(f' NB模型:准确率:{score} 训练耗时:{stop_train - start_train}秒; 推理耗时{stop_eval - stop_train}')

NB 模型:准确率:0.418 训练耗时:0.0030438899993896484秒; 推理耗时0.00099945068359375

  • Q:通过PCA降维后,剩下相对重要的特征,再用贝叶斯是否能提高准确率?
  • A:不一定,但是可以减少计算代价
(c)决策树
'''
    决策树 分类测试
'''
from sklearn.tree import DecisionTreeClassifier

dtc = DecisionTreeClassifier()

start_train = time.time()

dtc.fit(X=X_train, y=y_train)

stop_train = time.time()

# 模型预测
score = dtc.score(X=X_test, y=y_test)

stop_eval = time.time()

print(f'决策树 模型:准确率:{score} 训练耗时:{stop_train - start_train}秒; 推理耗时{stop_eval - stop_train}')

决策树 模型:准确率:0.562 训练耗时:0.16399717330932617秒; 推理耗时0.0009996891021728516

(d)支持向量机
'''
    支持向量机 分类测试
'''
from sklearn.svm import SVC

svc = SVC()

start_train = time.time()

svc.fit(X=X_train, y=y_train)

stop_train = time.time()

# 模型预测
score = svc.score(X=X_test, y=y_test)

stop_eval = time.time()

print(f'支持向量机 模型:准确率:{score} 训练耗时:{stop_train - start_train}秒; 推理耗时{stop_eval - stop_train}')

支持向量机 模型:准确率:0.6435 训练耗时:2.346158742904663秒; 推理耗时1.1651272773742676

  • 这里其实就能看出来SVM的计算代价比其他模型高出好几个数量级的时间
(e)随机森林
'''
    随机森林 分类测试
'''
# ensemble 指的是集成学习,一群臭皮匠,抵个诸葛亮

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier()

start_train = time.time()

rfc.fit(X=X_train, y=y_train)

stop_train = time.time()

# 模型预测
score = rfc.score(X=X_test, y=y_test)

stop_eval = time.time()

print(f'随机森林 模型:准确率:{score} 训练耗时:{stop_train - start_train}秒; 推理耗时{stop_eval - stop_train}')


随机森林 模型:准确率:0.6815 训练耗时:2.246029853820801秒; 推理耗时0.0409998893737793

五、集成学习 - Ensemble

  • 集成学习中没有新的算法,继承学习是一种算法调度策略
  • 目标:一堆弱分类器的组合打败强分类器(一堆臭皮匠,干掉诸葛亮)
    • 强分类器:KNN,贝叶斯,决策树,SVM …
    • 弱分类器:将强分类器的复杂度降低,精度降低,提高速度,变成一个弱分类器
      • 决策树是一种在集成学习中常用的弱分类器

1.集成学习的调度思想

# Voting
from sklearn.ensemble import VotingClassifier
from sklearn.ensemble import VotingRegressor

# stack
from sklearn.ensemble import StackingClassifier
from sklearn.ensemble import StackingRegressor

#  bag
from sklearn.ensemble import BaggingClassifier
from sklearn.ensemble import BaggingRegressor

# boost

from sklearn.ensemble import AdaBoostClassifier
from sklearn.ensemble import AdaBoostRegressor

  • voting思想:算法不同,数据相同,试图产生略有差异的结果,再基于规则整合结果
  • bagging思想:算法相同,数据不同,试图产生略有差异的结果,再基于规则整合结果
  • stacking思想:前面类似于voting,但是,结果拟合时使用模型,而不是使用人为规则,2阶段的思想
  • boosting思想:错题本思想!!!也是多阶段思想(MTCNN)
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GS-SVM(Grid Search SVM),GA-SVM(Genetic Algorithm SVM),以及PSO-SVM(Particle Swarm Optimization SVM)都是在支持向量机(SVM)的基础上,结合其他优化方法或搜索策略进行改进的模型。它们的主要区别在于: 1. **GS-SVM(Grid Search SVM)**: 这种方法采用网格搜索的方式,通过遍历一系列预定义的参数组合,找到最优的超参数,如正则化参数C和核函数的参数。这种方法较为简单但计算成本较高,特别是当参数空间较大时。 2. **GA-SVM(Genetic Algorithm SVM)**: GA(遗传算法)是模拟生物进化过程的优化算法。在这个版本中,SVM的参数被视为“个体”,通过交叉、变异和选择等操作进行迭代,目标是寻找到全局最优解。GA-SVM具有更强的全局优化能力,但可能会收敛速度较慢。 3. **PSO-SVM(Particle Swarm Optimization SVM)**: PSO(粒子群优化)算法是一个群体智能优化方法,每个粒子代表一个解决方案,并通过个体间的交流和集体学习来找到最优解。在PSO-SVM中,粒子的位置和速度对应于SVM的参数,通过迭代优化这些参数来提升模型性能。PSO通常能快速收敛,但局部最优的风险也存在。 总结来说,这些变体的主要区别在于: - GS-SVM依赖手动设置,计算成本高; - GA-SVM使用进化策略,可能找到全局最优但搜索过程复杂; - PSO-SVM利用群体智能,速度快但可能存在局部最优。 相关问题: 1. 遗传算法和粒子群优化各自在优化过程中如何处理参数? 2. 在实际应用中,哪种方法更适用于资源有限的情况? 3. 有没有例子说明哪种搜索策略在特定类型的数据集上表现更好?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值