华为datacom-HCIA学习之路
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为datacom-HCIA学习之路相关的知识,希望对你有一定的参考价值。
华为datacom-HCIA
华为datacom-HCIA 1
1. 第四弹 5
1.1. OSPF认证 5
1.1.1. 基于接口认证 5
1.1.1.1. 接口认证更优先 6
1.1.1.2. [R2]interface g0/0/1 6
1.1.1.3. [R2-g0/0/1]ospf authentication-mode simple huawei 6
1.1.1.3.1. 明文认证 6
1.1.1.4. [R2-g0/0/1]ospf authentication-mode md5 1 cipher huawei 6
1.1.1.4.1. MD5认证 6
1.1.2. 基于区域认证 6
1.1.2.1. ospf 1 7
1.1.2.2. area 0 7
1.1.2.3. authentication-mode simple cipher huawei 7
1.2. OSPF选路 7
1.2.1. 标准:优先级、子网掩码、开销值 7
1.2.2. cost=带宽参考值(100MB/S)/接口带宽 7
1.2.3. 路由传递的入方向,接口开销之和 7
1.2.4. 修改cost值方式 7
1.2.4.1. 1、修改带宽参考值 7
1.2.4.1.1. [Huawei-ospf-1]bandwidth-reference x 8
1.2.4.2. 2、修改一个接口 8
1.2.4.2.1. [Huawei-GigabitEthernet0/0/0] ospf cost cost 8
1.3. 命令 8
2. 第五弹 9
2.1. WLAN原理与配置 10
2.1.1. Virtual Local Area Network虚拟局域网 10
2.2. VLAN 10
2.2.1. 虚拟局域网 10
2.2.2. 将一个物理局域网,在逻辑上划分成多个小的局域网 10
2.2.3. 通过在交换机上配置VLAN,可以实现,在同一个VLAN的用户可以相互通信,不同vlan的用户被二层隔离 11
2.2.4. 作用:隔离广播域 11
2.2.5. 交换机通过Tag区分不同的VLAN ID 11
2.3. VLAN数据帧格式 11
2.3.2. DMAC SMAC Type Data FCS 11
2.3.2.1. 没有携带Tag的帧 12
2.3.3. DMAC SMAC Tag Type Data FCS(帧尾) 12
2.3.3.1. 携带Tag的帧 12
2.3.3.2. Tag 4字节 12
2.3.3.3. TPID 12
2.3.3.3.1. 标签协议标识:0x8100,代表vlan tag 12
2.3.3.4. TCI 12
2.3.3.4.1. Pri:优先级,用于服务质量 13
2.3.3.4.2. CFI:是否支持令牌环网络 13
2.3.3.5. VLAN ID 13
2.3.3.5.1. 12bit 13
2.3.4. Tag 14
2.3.4.1. VLAN标签长4个字节,直接添加在以太网帧头中,IEEE802.1Q文档对VLAN标签作出了说明 14
2.3.4.2. TPID:Tag Protocol Identifier,2字节,固定取值,0x8100,是IEEE定义的新类型,表明这是一个携带802.1Q标签的帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃 14
2.3.4.3. TCI:Tag Control Information,2字节。帧的控制信息,详细说明如下 14
2.3.4.3.1. Priority:3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。当交换机阻塞时,优先发送优先级高的数据帧 14
2.3.4.3.2. CFI:Canonical Format Indicator,1比特。CFI表示MAC地址是否是经典格式。CFI为0说明是经典格式,CFI为1表示为非经典格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0 14
2.3.4.3.3. VLAN Identifier:VLAN ID,12比特,在X7系列交换机中,可配置的VLAN ID取值范围为0~4095,但是0和4095在协议中规定为保留的VLAN ID,不能给用户使用 15
2.3.4.4. 在现有的交换网络环境中,以太网的帧有两种格式 15
2.3.4.4.1. 没有加上VLAN标记的标准以太网帧(untagged frame);有VLAN标记的以太网帧(tagged frame) 15
2.4. 链路类型 15
2.4.1. access类型 15
2.4.1.1. 接入链路 16
2.4.1.1.1. 连接主机和交换机 16
2.4.2. trunk链路 16
2.4.2.1. 干道链路 16
2.4.2.1.1. 交换机与交换机之间 17
2.4.3. hybrid链路 17
2.4.3.1. 混合链路,华为专有 17
2.4.3.2. 手动定义对于tag的处理动作 17
2.5. PVID 17
2.5.1. 端口 VLAN ID 17
2.5.2. 默认情况下,每个端口的vlan id都是1 18
2.6. 端口收发规则 18
2.6.1. access端口 18
2.6.1.1. 接收规则 18
2.6.1.1.1. 收到一个不带tag字段的数据帧,添加上tag字段,VLAN ID的取值为本端口PVID的值 18
2.6.1.2. 发送规则 18
2.6.1.2.1. 查看数据帧的VLAN ID和本端口的PVID是否相同,相同去掉tag发送,不同丢掉 19
2.6.2. trunk端口 19
2.6.2.1. 发送规则 19
2.6.2.1.1. 1、首先查看数据帧的VLAN ID是否在允许通过列表中 19
2.6.2.1.2. 2、 19
2.6.2.2. 接收规则 20
2.6.2.2.1. 1、收到一个不带tag的数据帧,添加tag字段,VLAN ID取值为本端口的值,然后查看允许通过列表 20
2.6.2.2.2. 2、收到一个带tag的数据帧,查看允许通过列表 21
2.6.3. hybrid端口 21
2.6.3.1. 发送规则 21
2.6.3.1.1. 查看VLAN ID是否在允许通过列表 22
2.6.3.2. 接收规则 23
2.6.3.2.1. 1、收到一个不带tag的数据帧,打上本端口的PVID,查看允许通过列表 23
2.6.3.2.2. 2、收到一个带tag的数据帧,查看允许通过列表 23
2.7. 命令配置 24
2.7.1. 创建VLAN 24
2.7.1.1. 创建一个VLAN 24
2.7.1.1.1. vlan batch 10 25
2.7.1.2. 创建多个vlan 25
2.7.1.2.1. vlan batch 10 20 30 25
2.7.1.3. 创建多个连续的vlan 25
2.7.1.3.1. vlan batch 10 to 50 25
2.7.2. access 25
2.7.2.1. 1、进入接口 26
2.7.2.1.1. interface e0/0/1 26
2.7.2.2. 2。设置链路类型 26
2.7.2.2.1. [Huawei-Ethernet0/0/4]port link-type access 26
2.7.2.3. 3、设置所属的VLAN ID 26
2.7.2.3.1. [Huawei-Ethernet0/0/4]port default vlan 20 26
2.7.3. trunk 26
2.7.3.1. 1、进入接口 27
2.7.3.2. 2、设置链路类型 27
2.7.3.2.1. [Huawei-Ethernet0/0/1]port link-type trunk 27
2.7.3.3. 3、设置允许通过VLAN 27
2.7.3.4. 4、更改PVID 27
2.7.4. hybrid 27
第四弹
OSPF认证
基于接口认证
接口认证更优先
[R2]interface g0/0/1
[R2-g0/0/1]ospf authentication-mode simple huawei
明文认证
[R2-g0/0/1]ospf authentication-mode md5 1 cipher huawei
MD5认证
基于区域认证
ospf 1
area 0
authentication-mode simple cipher huawei
OSPF选路
标准:优先级、子网掩码、开销值
cost=带宽参考值(100MB/S)/接口带宽
路由传递的入方向,接口开销之和
修改cost值方式
1、修改带宽参考值
[Huawei-ospf-1]bandwidth-reference x
2、修改一个接口
[Huawei-GigabitEthernet0/0/0] ospf cost cost
命令
第五弹
WLAN原理与配置
Virtual Local Area Network虚拟局域网
VLAN
虚拟局域网
将一个物理局域网,在逻辑上划分成多个小的局域网
通过在交换机上配置VLAN,可以实现,在同一个VLAN的用户可以相互通信,不同vlan的用户被二层隔离
作用:隔离广播域
交换机通过Tag区分不同的VLAN ID
VLAN数据帧格式
DMAC SMAC Type Data FCS
没有携带Tag的帧
DMAC SMAC Tag Type Data FCS(帧尾)
携带Tag的帧
Tag 4字节
TPID
标签协议标识:0x8100,代表vlan tag
TCI
Pri:优先级,用于服务质量
CFI:是否支持令牌环网络
VLAN ID
12bit
2^12=4096个
取值范围:0~4095
可用:1~4094
Tag
VLAN标签长4个字节,直接添加在以太网帧头中,IEEE802.1Q文档对VLAN标签作出了说明
TPID:Tag Protocol Identifier,2字节,固定取值,0x8100,是IEEE定义的新类型,表明这是一个携带802.1Q标签的帧。如果不支持802.1Q的设备收到这样的帧,会将其丢弃
TCI:Tag Control Information,2字节。帧的控制信息,详细说明如下
Priority:3比特,表示帧的优先级,取值范围为0~7,值越大优先级越高。当交换机阻塞时,优先发送优先级高的数据帧
CFI:Canonical Format Indicator,1比特。CFI表示MAC地址是否是经典格式。CFI为0说明是经典格式,CFI为1表示为非经典格式。用于区分以太网帧、FDDI(Fiber Distributed Digital Interface)帧和令牌环网帧。在以太网中,CFI的值为0
VLAN Identifier:VLAN ID,12比特,在X7系列交换机中,可配置的VLAN ID取值范围为0~4095,但是0和4095在协议中规定为保留的VLAN ID,不能给用户使用
在现有的交换网络环境中,以太网的帧有两种格式
没有加上VLAN标记的标准以太网帧(untagged frame);有VLAN标记的以太网帧(tagged frame)
链路类型
access类型
接入链路
连接主机和交换机
trunk链路
干道链路
交换机与交换机之间
hybrid链路
混合链路,华为专有
手动定义对于tag的处理动作
PVID
端口
默认情况下,每个端口的vlan id都是1
端口收发规则
access端口
接收规则
收到一个不带tag字段的数据帧,添加上tag字段,VLAN ID的取值为本端口PVID的值
发送规则
查看数据帧的VLAN ID和本端口的PVID是否相同,相同去掉tag发送,不同丢掉
trunk端口
发送规则
1、首先查看数据帧的VLAN ID是否在允许通过列表中
2、
(1)在允许通过列表中,则查看数据帧的VLAN ID和本端口的PVID是否相同
相同则去掉tag发送
不同则带着tag发送
(2)不在列表中,直接丢弃
接收规则
1、收到一个不带tag的数据帧,华为云技术分享Python成长之路机器学习:10+分类算法汇总学习
一直都说python是人工智能、机器学习等算法的良配,很多python大神除了常规的大数据爬虫、网站开发等代码能力外,人工智能/机器学习也都是手到擒来。因此我也“跳坑”来看看 。
由于python sklearn库的良好集成,我发现无论对于各类算法的实现、训练、预测都很简单,而且不同算法之间的代码逻辑和使用方法也不尽相同。那就干脆来个一锅端,来个10+分类算法的汇总集锦。
示例代码
这次为了方便理解,我直接先放代码,然后再简单入门级地讲讲各类算法的优劣。
1 from sklearn import svm
2 from sklearn.neural_network import MLPClassifier
3 from sklearn.tree import DecisionTreeClassifier
4 from sklearn.neighbors import KNeighborsClassifier
5 from sklearn.naive_bayes import BernoulliNB
6 from sklearn.naive_bayes import GaussianNB
7 from sklearn.naive_bayes import MultinomialNB
8 from sklearn.linear_model import LogisticRegression
9 from sklearn.ensemble import RandomForestClassifier
10 from sklearn.ensemble import AdaBoostClassifier
11 import xgboost
12 import lightgbm
13 import time
14 from sklearn import metrics
15 from sklearn.model_selection import train_test_split
16 import random
17 import numpy
18 from openpyxl import Workbook,load_workbook
19
20
21 def train_test_algorithm(model, x_train, y_train, x_test, y_test):
22 print(‘begin to train……‘)
23 start_time = time.time()
24 model.fit(x_train, y_train)
25 print(‘begin to predict……‘)
26 y_pred_model = model.predict(x_test)
27 classifier = str(model).split(‘(‘)[0]
28 print(‘begin to get the result of Classifier_Type:{}...‘.format(classifier))
29 score = metrics.accuracy_score(y_test, y_pred_model)
30 print(‘The accuracy score of {0} is: {1}%‘.format(classifier, round(score * 100, 2)))
31 end_time = time.time()
32 use_time = end_time - start_time
33 print(‘The time of using {0} is :{1}‘.format(classifier, round(use_time, 2)))
34 print(‘{} test end!
‘.format(classifier))
35 return score, round(use_time, 2), classifier
36
37
38 def get_redball():
39 redlist = []
40 while len(redlist) < 7:
41 temp = random.randint(1, 34)
42 if temp not in redlist:
43 redlist.append(temp)
44 return redlist
45
46
47 def get_blueball():
48 return random.randint(1, 17)
49
50
51 def get_data():
52 x_temp, y_temp = [], []
53 for i in range(2000):
54 x_temp.append(get_redball())
55 y_temp.append(get_blueball())
56 x = numpy.array(x_temp)
57 y = numpy.array(y_temp)
58 return x, y
59
60 def get_data2():
61 import csv
62 data = csv.reader(open(‘winequality-red.csv‘,‘r‘))
63 labels,xlist=[],[]
64 firstline = True
65 for i in data:
66 if firstline:
67 firstline = False
68 else:
69 r = i[0].split(‘;‘)
70 labels.append(float(r[-1]))
71 r.pop()
72 floatrow = [float(num) for num in r]
73 xlist.append(floatrow)
74 # 转化为numpy格式
75 x = numpy.array(xlist)
76 y = numpy.array(labels)
77 return x,y
78
79
80 if __name__ == ‘__main__‘:
81 # 定义各类分类算法
82 svc = svm.SVC() # 支持向量机,SVM
83 mlp = MLPClassifier() # 多层感知机,MLP
84 dtc = DecisionTreeClassifier() # 决策树,DT
85 knc = KNeighborsClassifier() # K最近邻,KNN
86 bnb = BernoulliNB() # 伯努利贝叶斯,BNB
87 gnb = GaussianNB() # 高斯贝叶斯,GNB
88 mnb = MultinomialNB() # 朴素贝叶斯,MNB
89 lgr = LogisticRegression() # 逻辑回归,LGR
90 rfc = RandomForestClassifier() # 随机森林,RFC
91 abc = AdaBoostClassifier() # AdaBoost
92 xgb = xgboost.XGBClassifier() # xgboost
93 gbm = lightgbm.LGBMClassifier() # lightgbm
94
95 # 训练/测试数据生成
96 # 真实红酒销售数据
97 x, y = get_data2()
98 # 随机生成的双色球红蓝球数据
99 # x,y = get_data()
100 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=531)
101 classify_type_list = [svc, mlp, dtc, knc, bnb, gnb, mnb, lgr, rfc, abc, xgb, gbm]
102 test_result = {}
103 tablename = ‘wine_result‘
104 wb = load_workbook(‘result.xlsx‘)
105 try:
106 ws = wb[tablename]
107 except:
108 ws = wb.create_sheet(tablename)
109 ws.append([‘classifer_type‘,‘score‘,‘use_time‘])
110 for i, type in enumerate(classify_type_list):
111 score, use_time, classifier = train_test_algorithm(type, x_train, y_train, x_test, y_test)
112 ws.append([classifier,str(round(100*score,2))+‘%‘,use_time])
113 wb.save(‘result.xlsx‘)
这里有两组测试数据,一组是机器学习官网常用的红酒质量数据(下载地址:"http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"),一组是2000期双色球红/蓝球号码(当然这里我自己偷懒了,是用随机函数生成的,但不影响对机器学习算法的学习)。
对应的测试结果如下:
(1)双色球数据测试结果:
(2)红酒质量数据测试结果:
知识串讲
(1)分类算法代码实现流程:
1、准备数据样本,通过train_test_split函数可自动按比例生成训练和测试的数据数量,如样例代码为20%的测试数据,80%的训练数据;
2、实例化具体某个算法,如mlp = MLPClassifier();
3、通过fit函数对训练数据(x_train/y_train)进行预处理;
4、基于测试x_test数据进行具体算法的预测(predict函数实现),产生y_pred_data;
5、将预测数据y_pred_data与真实数据y_test进行对比,可以通过平方差等各类评估方法来判定,分类算法的准确率。
从流程上来讲,后面分类算法实现上都可以参照我的样例代码来做。
(2)示例代码有一部分代码是涉及excle表(csv/xlsx格式等)的处理,常用的python库有csv、openpyxl、xlrd等。因此我准备下次对excle表处理再进行汇总整理。这次就不具体记录了。
分类算法对比总结
支持向量机(SVM):通过分类面使两侧样本数据到分类面的最小距离最大,通俗地讲就是让他们离分类面都滚远点;当前在文本识别、人脸识别等场景中都有应用 优点:泛化性能高,能解决高维问题;对小样本的机器学习效果好 缺点:对缺失数据敏感,对非线性问题缺少通用解决方案,参数调节和函数的选择对算法准确率有很大影响
多层感知机(MLP) 其实就是两层的传统神经网络,是为了解决非线性问题(单层感知机只能对线性数据进行分类),通过将第一层神经元计算结果作为第二层输入,进行计算预测 优点:能处理非线性问题 缺点:随着层数增加会导致过拟合,参数调节难,梯度弥散、单侧抑制性等问题
决策树(DT) 通过多个结点判断进行结果判定,类似树的节点为条件,叶节点为分类结果 优点:适用于高维数据 缺点:对各类别样本数量不一致时,会对多样本的类别偏向;易过拟合,会忽略数据之间的相关性
K最近邻(KNN) 通过训练数据与预测数据之间的最邻近K个实例来判断,如果多数实例属于某个类别则预测数据属于那一类 优点:可以处理多分类问题,简单易懂 缺点:每次分类需要重新计算训练数据和测试数据,效率低;对训练数据的容错性较差,对多维数据无法处理
朴素贝叶斯(MNB) 对于待分类数据,通过学习得到的模型计算后验概率分布,并以后验概率作为 类别断定,一般用于新闻分类、垃圾邮件过滤 优点:模型参数少,对缺失数据不敏感,算法简单 缺点:实际应用中数据集属性无法保证相互独立,当数据集呈现不同属性时会导致分类效果大大下降;另外需要事先知道先验概率
逻辑回归(LGR) 是一种广义的线性回归分析模型,一般用于二分类问题,给定一些输入,给出是或否的结果 优点:计算量较小,易于实现和理解 缺点:容易出现欠拟合,对数据正确性高度依赖;如果无效数据过高会直接影响分类精度
随机森林(RFC) 通过随机森林中所有决策树的预测,进行平均值计算,如果哪一分类被选择最多,则预测数据就属于哪一类 优点:能降低过拟合风险,不会因为少量异常导致整体出错,因此相对稳定 缺点:计算成本高,训练时间长,如果训练数据有噪音则会出现过拟合现象
AdaBoost 将多个弱分类器通过加权结合,使其成为一个强分类器 优点:泛化误差低,不易过拟合,易与其他分类算法结合使用 缺点:对异常点非常敏感,并在分错后会逐级影响后面的弱分类器
xgboost 在GBDT(梯度提升决策树)基础发展而来,利用cpu的多线程引入正则化项 优点:不易过拟合,计算有提升,支持线性分类,能通过自动学习解决样本缺失问题 缺点:数据规格大时贪心算法比较耗时,对cache优化不友好
lightgbm 梯度boosting框架的升级版,使用基于学习算法的决策树,能通过减少数据并行过程中的通讯开销提升效率,目前貌似是最热闹的boosting算法 优点:训练效率快,支持并行化学习,能处理大规格数据。速度比xgboost更快
结束
以上示例代码,其实并不能完全代表一类算法的优劣,因为我用的都是默认参数。针对不同测试数据,其实是需要具体来调参的,比如xgboost算法,其实有以下参数。因此我今天只是入门级地了解下机器学习的框架流程。
1 base_score=0.5, booster=‘gbtree‘, colsample_bylevel=1,
2 colsample_bynode=1, colsample_bytree=1, gamma=0,
3 learning_rate=0.1, max_delta_step=0, max_depth=3,
4 min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,
5 nthread=None, objective=‘binary:logistic‘, random_state=0,
6 reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,
7 silent=None, subsample=1, verbosity=1
作者:华为云特约供稿开发者 鹏哥贼优秀
以上是关于华为datacom-HCIA学习之路的主要内容,如果未能解决你的问题,请参考以下文章
华为云技术分享Python成长之路机器学习:10+分类算法汇总学习
位居中国机器学习公有云市场份额第一,华为云 ModelArts 的进阶之路
AI平民化之路 - 华为云ModelArts和AI Gallery体验指南
由于python sklearn库的良好集成,我发现无论对于各类算法的实现、训练、预测都很简单,而且不同算法之间的代码逻辑和使用方法也不尽相同。那就干脆来个一锅端,来个10+分类算法的汇总集锦。
示例代码
这次为了方便理解,我直接先放代码,然后再简单入门级地讲讲各类算法的优劣。
1 from sklearn import svm 2 from sklearn.neural_network import MLPClassifier 3 from sklearn.tree import DecisionTreeClassifier 4 from sklearn.neighbors import KNeighborsClassifier 5 from sklearn.naive_bayes import BernoulliNB 6 from sklearn.naive_bayes import GaussianNB 7 from sklearn.naive_bayes import MultinomialNB 8 from sklearn.linear_model import LogisticRegression 9 from sklearn.ensemble import RandomForestClassifier 10 from sklearn.ensemble import AdaBoostClassifier 11 import xgboost 12 import lightgbm 13 import time 14 from sklearn import metrics 15 from sklearn.model_selection import train_test_split 16 import random 17 import numpy 18 from openpyxl import Workbook,load_workbook 19 20 21 def train_test_algorithm(model, x_train, y_train, x_test, y_test): 22 print(‘begin to train……‘) 23 start_time = time.time() 24 model.fit(x_train, y_train) 25 print(‘begin to predict……‘) 26 y_pred_model = model.predict(x_test) 27 classifier = str(model).split(‘(‘)[0] 28 print(‘begin to get the result of Classifier_Type:{}...‘.format(classifier)) 29 score = metrics.accuracy_score(y_test, y_pred_model) 30 print(‘The accuracy score of {0} is: {1}%‘.format(classifier, round(score * 100, 2))) 31 end_time = time.time() 32 use_time = end_time - start_time 33 print(‘The time of using {0} is :{1}‘.format(classifier, round(use_time, 2))) 34 print(‘{} test end! ‘.format(classifier)) 35 return score, round(use_time, 2), classifier 36 37 38 def get_redball(): 39 redlist = [] 40 while len(redlist) < 7: 41 temp = random.randint(1, 34) 42 if temp not in redlist: 43 redlist.append(temp) 44 return redlist 45 46 47 def get_blueball(): 48 return random.randint(1, 17) 49 50 51 def get_data(): 52 x_temp, y_temp = [], [] 53 for i in range(2000): 54 x_temp.append(get_redball()) 55 y_temp.append(get_blueball()) 56 x = numpy.array(x_temp) 57 y = numpy.array(y_temp) 58 return x, y 59 60 def get_data2(): 61 import csv 62 data = csv.reader(open(‘winequality-red.csv‘,‘r‘)) 63 labels,xlist=[],[] 64 firstline = True 65 for i in data: 66 if firstline: 67 firstline = False 68 else: 69 r = i[0].split(‘;‘) 70 labels.append(float(r[-1])) 71 r.pop() 72 floatrow = [float(num) for num in r] 73 xlist.append(floatrow) 74 # 转化为numpy格式 75 x = numpy.array(xlist) 76 y = numpy.array(labels) 77 return x,y 78 79 80 if __name__ == ‘__main__‘: 81 # 定义各类分类算法 82 svc = svm.SVC() # 支持向量机,SVM 83 mlp = MLPClassifier() # 多层感知机,MLP 84 dtc = DecisionTreeClassifier() # 决策树,DT 85 knc = KNeighborsClassifier() # K最近邻,KNN 86 bnb = BernoulliNB() # 伯努利贝叶斯,BNB 87 gnb = GaussianNB() # 高斯贝叶斯,GNB 88 mnb = MultinomialNB() # 朴素贝叶斯,MNB 89 lgr = LogisticRegression() # 逻辑回归,LGR 90 rfc = RandomForestClassifier() # 随机森林,RFC 91 abc = AdaBoostClassifier() # AdaBoost 92 xgb = xgboost.XGBClassifier() # xgboost 93 gbm = lightgbm.LGBMClassifier() # lightgbm 94 95 # 训练/测试数据生成 96 # 真实红酒销售数据 97 x, y = get_data2() 98 # 随机生成的双色球红蓝球数据 99 # x,y = get_data() 100 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=531) 101 classify_type_list = [svc, mlp, dtc, knc, bnb, gnb, mnb, lgr, rfc, abc, xgb, gbm] 102 test_result = {} 103 tablename = ‘wine_result‘ 104 wb = load_workbook(‘result.xlsx‘) 105 try: 106 ws = wb[tablename] 107 except: 108 ws = wb.create_sheet(tablename) 109 ws.append([‘classifer_type‘,‘score‘,‘use_time‘]) 110 for i, type in enumerate(classify_type_list): 111 score, use_time, classifier = train_test_algorithm(type, x_train, y_train, x_test, y_test) 112 ws.append([classifier,str(round(100*score,2))+‘%‘,use_time]) 113 wb.save(‘result.xlsx‘)
这里有两组测试数据,一组是机器学习官网常用的红酒质量数据(下载地址:"http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv"),一组是2000期双色球红/蓝球号码(当然这里我自己偷懒了,是用随机函数生成的,但不影响对机器学习算法的学习)。
对应的测试结果如下:
(1)双色球数据测试结果:
(2)红酒质量数据测试结果:
知识串讲
(1)分类算法代码实现流程:
1、准备数据样本,通过train_test_split函数可自动按比例生成训练和测试的数据数量,如样例代码为20%的测试数据,80%的训练数据;
2、实例化具体某个算法,如mlp = MLPClassifier();
3、通过fit函数对训练数据(x_train/y_train)进行预处理;
4、基于测试x_test数据进行具体算法的预测(predict函数实现),产生y_pred_data;
5、将预测数据y_pred_data与真实数据y_test进行对比,可以通过平方差等各类评估方法来判定,分类算法的准确率。
从流程上来讲,后面分类算法实现上都可以参照我的样例代码来做。
(2)示例代码有一部分代码是涉及excle表(csv/xlsx格式等)的处理,常用的python库有csv、openpyxl、xlrd等。因此我准备下次对excle表处理再进行汇总整理。这次就不具体记录了。
分类算法对比总结
支持向量机(SVM):通过分类面使两侧样本数据到分类面的最小距离最大,通俗地讲就是让他们离分类面都滚远点;当前在文本识别、人脸识别等场景中都有应用 优点:泛化性能高,能解决高维问题;对小样本的机器学习效果好 缺点:对缺失数据敏感,对非线性问题缺少通用解决方案,参数调节和函数的选择对算法准确率有很大影响
多层感知机(MLP) 其实就是两层的传统神经网络,是为了解决非线性问题(单层感知机只能对线性数据进行分类),通过将第一层神经元计算结果作为第二层输入,进行计算预测 优点:能处理非线性问题 缺点:随着层数增加会导致过拟合,参数调节难,梯度弥散、单侧抑制性等问题
决策树(DT) 通过多个结点判断进行结果判定,类似树的节点为条件,叶节点为分类结果 优点:适用于高维数据 缺点:对各类别样本数量不一致时,会对多样本的类别偏向;易过拟合,会忽略数据之间的相关性
K最近邻(KNN) 通过训练数据与预测数据之间的最邻近K个实例来判断,如果多数实例属于某个类别则预测数据属于那一类 优点:可以处理多分类问题,简单易懂 缺点:每次分类需要重新计算训练数据和测试数据,效率低;对训练数据的容错性较差,对多维数据无法处理
朴素贝叶斯(MNB) 对于待分类数据,通过学习得到的模型计算后验概率分布,并以后验概率作为 类别断定,一般用于新闻分类、垃圾邮件过滤 优点:模型参数少,对缺失数据不敏感,算法简单 缺点:实际应用中数据集属性无法保证相互独立,当数据集呈现不同属性时会导致分类效果大大下降;另外需要事先知道先验概率
逻辑回归(LGR) 是一种广义的线性回归分析模型,一般用于二分类问题,给定一些输入,给出是或否的结果 优点:计算量较小,易于实现和理解 缺点:容易出现欠拟合,对数据正确性高度依赖;如果无效数据过高会直接影响分类精度
随机森林(RFC) 通过随机森林中所有决策树的预测,进行平均值计算,如果哪一分类被选择最多,则预测数据就属于哪一类 优点:能降低过拟合风险,不会因为少量异常导致整体出错,因此相对稳定 缺点:计算成本高,训练时间长,如果训练数据有噪音则会出现过拟合现象
AdaBoost 将多个弱分类器通过加权结合,使其成为一个强分类器 优点:泛化误差低,不易过拟合,易与其他分类算法结合使用 缺点:对异常点非常敏感,并在分错后会逐级影响后面的弱分类器
xgboost 在GBDT(梯度提升决策树)基础发展而来,利用cpu的多线程引入正则化项 优点:不易过拟合,计算有提升,支持线性分类,能通过自动学习解决样本缺失问题 缺点:数据规格大时贪心算法比较耗时,对cache优化不友好
lightgbm 梯度boosting框架的升级版,使用基于学习算法的决策树,能通过减少数据并行过程中的通讯开销提升效率,目前貌似是最热闹的boosting算法 优点:训练效率快,支持并行化学习,能处理大规格数据。速度比xgboost更快
结束
以上示例代码,其实并不能完全代表一类算法的优劣,因为我用的都是默认参数。针对不同测试数据,其实是需要具体来调参的,比如xgboost算法,其实有以下参数。因此我今天只是入门级地了解下机器学习的框架流程。
1 base_score=0.5, booster=‘gbtree‘, colsample_bylevel=1, 2 colsample_bynode=1, colsample_bytree=1, gamma=0, 3 learning_rate=0.1, max_delta_step=0, max_depth=3, 4 min_child_weight=1, missing=None, n_estimators=100, n_jobs=1, 5 nthread=None, objective=‘binary:logistic‘, random_state=0, 6 reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None, 7 silent=None, subsample=1, verbosity=1
作者:华为云特约供稿开发者 鹏哥贼优秀