一直都说python是人工智能、机器学习等算法的良配,很多python大神除了常规的大数据爬虫、网站开发等代码能力外,人工智能/机器学习也都是手到擒来。因此我也“跳坑”来看看 。

由于python sklearn库的良好集成,我发现无论对于各类算法的实现、训练、预测都很简单,而且不同算法之间的代码逻辑和使用方法也不尽相同。那就干脆来个一锅端,来个10+分类算法的汇总集锦。

示例代码

这次为了方便理解,我直接先放代码,然后再简单入门级地讲讲各类算法的优劣。


from sklearn import svm
from sklearn.neural_network import MLPClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import AdaBoostClassifier
import xgboost
import lightgbm
import time
from sklearn import metrics
from sklearn.model_selection import train_test_split
import random
import numpy
from openpyxl import Workbook,load_workbookdef train_test_algorithm(model, x_train, y_train, x_test, y_test):print('begin to train……')start_time = time.time()model.fit(x_train, y_train)print('begin to predict……')y_pred_model = model.predict(x_test)classifier = str(model).split('(')[0]print('begin to get the result of Classifier_Type:{}...'.format(classifier))score = metrics.accuracy_score(y_test, y_pred_model)print('The accuracy score of {0} is: {1}%'.format(classifier, round(score * 100, 2)))end_time = time.time()use_time = end_time - start_timeprint('The time of using {0} is :{1}'.format(classifier, round(use_time, 2)))print('{} test end!\n\n'.format(classifier))return score, round(use_time, 2), classifierdef get_redball():redlist = []while len(redlist) < 7:temp = random.randint(1, 34)if temp not in redlist:redlist.append(temp)return redlistdef get_blueball():return random.randint(1, 17)def get_data():x_temp, y_temp = [], []for i in range(2000):x_temp.append(get_redball())y_temp.append(get_blueball())x = numpy.array(x_temp)y = numpy.array(y_temp)return x, ydef get_data2():import csvdata = csv.reader(open('winequality-red.csv','r'))labels,xlist=[],[]firstline = Truefor i in data:if firstline:firstline = Falseelse:r = i[0].split(';')labels.append(float(r[-1]))r.pop()floatrow = [float(num) for num in r]xlist.append(floatrow)# 转化为numpy格式x = numpy.array(xlist)y = numpy.array(labels)return x,yif __name__ == '__main__':# 定义各类分类算法svc = svm.SVC()  # 支持向量机,SVMmlp = MLPClassifier()  # 多层感知机,MLPdtc = DecisionTreeClassifier()  # 决策树,DTknc = KNeighborsClassifier()  # K最近邻,KNNbnb = BernoulliNB()  # 伯努利贝叶斯,BNBgnb = GaussianNB()  # 高斯贝叶斯,GNBmnb = MultinomialNB()  # 朴素贝叶斯,MNBlgr = LogisticRegression()  # 逻辑回归,LGRrfc = RandomForestClassifier()  # 随机森林,RFCabc = AdaBoostClassifier()  # AdaBoostxgb = xgboost.XGBClassifier()  # xgboostgbm = lightgbm.LGBMClassifier()  # lightgbm# 训练/测试数据生成# 真实红酒销售数据x, y = get_data2()# 随机生成的双色球红蓝球数据# x,y = get_data()x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, random_state=531)classify_type_list = [svc, mlp, dtc, knc, bnb, gnb, mnb, lgr, rfc, abc, xgb, gbm]test_result = {}tablename = 'wine_result'wb = load_workbook('result.xlsx')try:ws = wb[tablename]except:ws = wb.create_sheet(tablename)ws.append(['classifer_type','score','use_time'])for i, type in enumerate(classify_type_list):score, use_time, classifier = train_test_algorithm(type, x_train, y_train, x_test, y_test)ws.append([classifier,str(round(100*score,2))+'%',use_time])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算法,其实有以下参数。因此我今天只是入门级地了解下机器学习的框架流程。

base_score=0.5, booster='gbtree', colsample_bylevel=1,colsample_bynode=1, colsample_bytree=1, gamma=0,learning_rate=0.1, max_delta_step=0, max_depth=3,min_child_weight=1, missing=None, n_estimators=100, n_jobs=1,nthread=None, objective='binary:logistic', random_state=0,reg_alpha=0, reg_lambda=1, scale_pos_weight=1, seed=None,silent=None, subsample=1, verbosity=1

作者:华为云特约供稿开发者 鹏哥贼优秀

【Python成长之路】机器学习:10+分类算法汇总学习相关推荐

  1. 【Python成长之路】快速理解复制、浅拷贝、深拷贝

    哈喽大家好,我是鹏哥. 今天想聊聊的主题是 -- 浅拷贝/深拷贝. ~~~上课铃~~~ 赤伶HITA - 赤伶 1 写在前面 浅拷贝.深拷贝的知识点,在python笔试和面试的过程中,经常被作为考题来 ...

  2. 【Python成长之路】破解Boss直聘网站滑块验证

    哈喽大家好,我是鹏哥. 今天要记录的内容是 -- 破解Boss直聘网站的滑块验证. -- 上 课 铃-- TuesdayBurak Yeter;Danelle Sandoval - Tuesday 1 ...

  3. [Python从零到壹] 十四.机器学习之分类算法五万字总结全网首发(决策树、KNN、SVM、分类对比实验)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程–>错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个人 ...

  5. (转)Python成长之路【第九篇】:Python基础之面向对象

    一.三大编程范式 正本清源一:有人说,函数式编程就是用函数编程-->错误1 编程范式即编程的方法论,标识一种编程风格 大家学习了基本的Python语法后,大家就可以写Python代码了,然后每个 ...

  6. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xa)的解决方法【华为云分享】

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  7. 【Python成长之路】Python爬虫 --requests库爬取网站乱码(\xe4\xb8\xb0\xe5\xaf\x8c\xe7\x9)的解决方法

    [写在前面] 在用requests库对自己的CSDN个人博客(https://blog.csdn.net/yuzipeng)进行爬取时,发现乱码报错(\xe4\xb8\xb0\xe5\xaf\x8c\ ...

  8. 【Python成长之路】如何用python开发自己的iphone应用程序,并添加至siri指令

    哈喽大家好,我是鹏哥. 今天想记录的学习主题是 -- 基于pythonista3 app开发自己的iphone应用程序. ~~~上课铃~~~ (由于今天被小伙伴推荐了这首歌,因此就应他的要求,作为此文 ...

  9. 【python代码实现】人工神经网络分类算法及其实战案例(股票价格波动分析)

    目录 前置知识 1.前言 2.人工神经网络模型 2.1.神经元模型与单层神经网络 2.2.多层人工神经网络模型 人工神经网络分类算法 1.构建数据集 2.响应函数 3.模型训练 4.测试样本分类 案例 ...

最新文章

  1. 2022-2028年中国氟橡胶产业竞争现状及发展前景分析报告
  2. 谈一谈周公所理解的面试
  3. 认识jQuery及jQuery选择器
  4. 通过XML设置屏幕方向(android:screenOrientation)详解
  5. python程序格式框架的描述_python 程序语言设计(嵩天)-学习笔记(第二章python 程序实例解析)...
  6. arcgis两点之间连线_ArcGIS中实现一种流向地图的方法
  7. 前端学习(1879)vue之电商管理系统电商系统之通过axios拦截器添加token认证
  8. 面试题:彻底搞懂 Cookie 和 Session
  9. pdb 调试python
  10. ubuntu 下eclipse 启动时出现An error has occurred. See the log file的问题
  11. 减小数据泄密负面影响的办法
  12. Atitit 提升开发效率 提升团队人员能力 目录 1. 多语言扩展 提升抽象度 2 2. 从上到下法 vs 从下倒上 问题诊断解决法 2 2.1. 培训机制 上到下法 2 2.2. 问题案例
  13. robocopy 备份_robocopy的用法,数据库局域网备份
  14. HTML CSS基础
  15. python求最值_Python应用:python求极值点(波峰波谷)
  16. MFC:读取整个记事本文件
  17. 小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖
  18. SparkGraphX快速入门
  19. intel(R)wireless-ac 9462感叹号,WLAN消失,电脑连不上网解决办法
  20. Linux命令 - ln命令

热门文章

  1. 卡尔曼滤波原理(2)
  2. html注释的内容如何修改,如何用自定义元素替换HTML注释
  3. 前后端分离重复提交_java+react前后端分离项目处理重复提交问题
  4. bat随机打开目录下的一个音乐文件_Tomcat bin目录详解
  5. python如何调用xpath_Python案例:使用XPath的爬虫
  6. java ui设计用什么_什么是UI设计?
  7. 相机噪声与深度感知的方法梳理
  8. Linux FTP安装问题
  9. bzoj2819: Nim(博弈+树剖)
  10. C++中的4种类型转换方式