关键词:
一直都说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
作者:华为云特约供稿开发者 鹏哥贼优秀
华为云技术分享机器学习(02)——学习资料链接
以下是我学习机器学习过程中的部分学习资料,当然除些之外还有更多的文章和视频,实际看了后觉得好多内容都太难,自己目前的数学基础很难理解里面讲解的内容。另外,资料太多反而影响学习效率,很多内容都是重复的,... 查看详情
华为云技术分享机器学习(01)——机器学习简介
最近在研究机器学习,随手将学习的过程记录下来,方面自己的学习与回顾1.机器学习是什么?机器学习(MachineLearning,ML)是专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之... 查看详情
我的十年技术成长之路漫谈及分享
...ff08;只列提纲没写内容,即兴发挥)主要介绍作为技术人如何学习,如何成长。最近从广州离职回到长沙也是职业生涯的一次大抉择,于是把之前分享内容写下来一方面作为自我总结,另外一 查看详情
我的十年技术成长之路漫谈及分享
...ff08;只列提纲没写内容,即兴发挥)主要介绍作为技术人如何学习,如何成长。最近从广州离职回到长沙也是职业生涯的一次大抉择,于是把之前分享内容写下来一方面作为自我总结,另外一 查看详情
如何准备机器学习工程师的面试?
...6、京东云机器学习面试分享7、京东AI与大数据部面经8、华为优招面试机器学习面经9、大量面经总结(包括牛客网的和我听来的)10、华为814留学生专场,研发类(大数据,技术研究)11、拼多多+猫眼+京东云+猎豹移动机器学习面试... 查看详情
我的十年技术成长之路漫谈及分享
...ff08;只列提纲没写内容,即兴发挥)主要介绍作为技术人如何学习,如何成长。最近从广州离职回到长沙也是职业生涯的一次大抉择,于是把之前分享内容写下来一方面作为自我总结,另外一方面也希望对其他... 查看详情
分享《机器学习之路》+pdf+阿布
下载:https://pan.baidu.com/s/10lKuBImFaJWzhwKg2nAs_A更多资料学习:http://blog.51cto.com/14087171版权说明:本人无版权,请您在体验电子版书籍的同时,支持正版,购买正版书籍!!!首页如下图 查看详情
猿创征文|前端到全栈,一名it初学者的学习与成长之路(代码片段)
...Vue&React开发框架❤前端开发实战❤Linux&云原生小马技术栈❤主打技术专栏❤其他专栏(实用干货)❤技术栈词云学习与成长总结写在前面2021年7月18日我在CSDN发布了第一篇技术文章,距现在已有一年,这也意味着我在CS... 查看详情
大数据包围你我,技术人如何走知识分享之路
本期推荐:【云享人物·大咖面对面】华为云首席产品官方国伟独家专访:当下云发展有待突破的并不是技术问题;现在为什么是#华为云#的最佳时机;以不变应万变,什么是云产品规划的三个关键出发点;... 查看详情
一个java程序员成长之路分享
...现在也天天加班,几乎每天都将近12点下班,学习些别的技术的时间很少,这篇文章所 查看详情
一个java程序员成长之路分享
...么走的时候,给我方向,毫不夸张的说,我现在的衣食无忧,技术马马虎虎, 都是拜他所 查看详情
一个java程序员成长之路分享
...么走的时候,给我方向,毫不夸张的说,我现在的衣食无忧,技术马马虎虎,都是拜他所赐。 查看详情
我在亚马逊云平台的学习成长之路(代码片段)
前言今年是亚马逊云科技成立的第16个年头,也是云计算行业诞生的16周年。作为云计算时代的“领头羊”,亚马逊2006年推出了名为AmazonWebServices(AWS)的新产品。AWS背后的想法是提供一个平台,同亚马逊内部使用的平台... 查看详情
程序员到创业,成长之路的技能分享
...xff0c;更喜欢熬夜。目前在做的事很多,有SaaS产品、有技术内容创作、也有「剑指大厂」知识星球,更有几十万技术粉丝的公号和2本技术书,非常厉害。这次邀请 @二哥给大家分享下他从程序员到创 查看详情
我的物联网成长记3如何开发物联网应用?华为云技术分享
...发的同时,也让应用提供商聚焦于自身的业务开发。基于华为物联网平台的应用开发方案如下。应用服务器作为应用侧的业务处理核心,分析物联网平台推送的设备消息,并根据分析结果与应用客户端进行交互,完成业务处理。... 查看详情
java成长之路[轉載u]
分享总结title:java成长之路tags:grammar_cjkRuby:true 经验差异1-3年要求建议3-5年建议5年+ 经验差异最近一年比较忙,经历了创业公司的倒闭。这次又来到一个创业公司。由于要分享经验,而且很久没有写博客了。所以就把这次... 查看详情
敏捷开发专家一席谈:云原生技术下的华为云devops实践之路
摘要:听华为云DevCloud首席技术布道师徐毅讲述云原生下的DevOps实践。本文分享自华为云社区《敏捷开发专家一席谈:云原生技术下的华为云DevOps实践之路》,作者:华为云社区精选。DevOps最早在2009年被人提出... 查看详情
华为云技术分享华为开发者大会hdc.cloud带你探索强化学习三大挑战及落地实践
...业务场景中落地应用的进程。3月13日下午14:00-17:20举行的华为开发者大会2020(Cloud)第三期华为DevRunLive开发者沙龙中,华为诺亚方舟实验室决策推理实验室主任郝建业将分享《强化学习的落地实践》,围绕强化学习的发展历史,... 查看详情