一般流程:数据收集、整理→数据预处理与特征工程(数据清理、集成、规约、变换、特征提取、筛选)→模型的选择与建立→模型的评估与优化。

定义模型:

前文详细描述了四种算法模型的实现(线性回归,逻辑回归,朴素贝叶斯,支持向量机)

5.决策树DT

from sklearn import tree
# 分类函数
model = tree.DecisionTreeClassifier(criterion='gini', max_depth=None, min_samples_split=2,min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,class_weight=None)# 回归函数
model = tree.DecisionTreeRegressor(criterion='mse', max_depth=None, min_samples_split=2,min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None,max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None)
  • criterion: 特征选取方法,可以是gini(基尼系数),entropy(信息增益),通常选择gini,即CART算法,如果选择后者,则是ID3和C4,.5
  • splitter: 特征划分点选择方法,可以是best或random,前者是在特征的全部划分点中找到最优的划分点,后者是在随机选择的部分划分点找到局部最优的划分点,一般在样本量不大的时候,选择best,样本量过大,可以用random
  • max_depth: 树的最大深度,默认可以不输入,那么不会限制子树的深度,一般在样本少特征也少的情况下,可以不做限制,但是样本过多或者特征过多的情况下,可以设定一个上限,一般取10~100
  • min_samples_split:节点再划分所需最少样本数,如果节点上的样本树已经低于这个值,则不会再寻找最优的划分点进行划分,且以结点作为叶子节点,默认是2,如果样本过多的情况下,可以设定一个阈值,具体可根据业务需求和数据量来定
  • min_samples_leaf: 叶子节点所需最少样本数,如果达不到这个阈值,则同一父节点的所有叶子节点均被剪枝,这是一个防止过拟合的参数,可以输入一个具体的值,或小于1的数(会根据样本量计算百分比)
  • min_weight_fraction_leaf: 叶子节点所有样本权重和,如果低于阈值,则会和兄弟节点一起被剪枝,默认是0,就是不考虑权重问题。这个一般在样本类别偏差较大或有较多缺失值的情况下会考虑
  • max_features: 划分考虑最大特征数,不输入则默认全部特征,可以选 log2N,sqrt(N),auto或者是小于1的浮点数(百分比)或整数(具体数量的特征)。如果特征特别多时如大于50,可以考虑选择auto来控制决策树的生成时间
  • max_leaf_nodes:最大叶子节点数,防止过拟合,默认不限制,如果设定了阈值,那么会在阈值范围内得到最优的决策树,样本量过多时可以设定
  • min_impurity_decrease/min_impurity_split: 划分最需最小不纯度,前者是特征选择时低于就不考虑这个特征,后者是如果选取的最优特征划分后达不到这个阈值,则不再划分,节点变成叶子节点
  • class_weight: 类别权重,在样本有较大缺失值或类别偏差较大时可选,防止决策树向类别过大的样本倾斜。可设定或者balanced,后者会自动根据样本的数量分布计算权重,样本数少则权重高,与min_weight_fraction_leaf对应

上图为分类模式结果,下图为回归模式结果。

  • 回归参数与分类参数不同之处在于没有class_weight参数,并且回归模式的criterion参数是mse或mae,前者是均方差,后者是和均值的差的绝对值之和,一般用前者,因为前者通常更为精准,且方便计算。
  • 优点:计算量相对较小, 且容易转化成分类规则. 只要沿着树根向下一直走到叶, 沿途的分裂条件就能够唯一确定一条分类的谓词,即速度快;挖掘出来的分类规则准确性高, 便于理解, 决策树可以清晰的显示哪些字段比较重要, 即可以生成可以理解的规则;可以处理连续和种类字段;不需要任何领域知识和参数假设;适合高维数据。
  • 缺点:对于各类别样本数量不一致的数据, 信息增益偏向于那些更多数值的特征;容易过拟合,忽略属性之间的相关性。

6.k近邻算法KNN

import sklearn# 分类模式
model = sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform',
algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)# 回归模式
model = sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, weights='uniform',
algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None)
  • n_neighbors : int,optional(default = 5);默认情况下kneighbors查询使用的邻居数。就是k-NN的k的值,选取最近的k个点。
  • weights : str或callable,可选(默认=‘uniform’);默认是uniform,参数可以是uniform、distance,也可以是用户自己定义的函数。uniform是均等的权重,就说所有的邻近点的权重都是相等的。distance是不均等的权重,距离近的点比距离远的点的影响大。用户自定义的函数,接收距离的数组,返回一组维数相同的权重。
  • algorithm : {‘auto’,‘ball_tree’,‘kd_tree’,‘brute’},可选;快速k近邻搜索算法,默认参数为auto,可以理解为算法自己决定合适的搜索算法。除此之外,用户也可以自己指定搜索算法ball_tree、kd_tree、brute方法进行搜索,brute是蛮力搜索,也就是线性扫描,当训练集很大时,计算非常耗时。kd_tree,构造kd树存储数据以便对其进行快速检索的树形数据结构,kd树也就是数据结构中的二叉树。以中值切分构造的树,每个结点是一个超矩形,在维数小于20时效率高。ball tree是为了克服kd树高纬失效而发明的,其构造过程是以质心C和半径r分割样本空间,每个节点是一个超球体。
  • leaf_size : int,optional(默认值= 30);默认是30,这个是构造的kd树和ball树的大小。这个值的设置会影响树构建的速度和搜索速度,同样也影响着存储树所需的内存大小。需要根据问题的性质选择最优的大小。
  • p : 整数,可选(默认= 2);距离度量公式。在上小结,我们使用欧氏距离公式进行距离度量。除此之外,还有其他的度量方法,例如曼哈顿距离。这个参数默认为2,也就是默认使用欧式距离公式进行距离度量。也可以设置为1,使用曼哈顿距离公式进行距离度量。
  • metric : 字符串或可调用,默认为’minkowski’;用于距离度量,默认度量是minkowski,也就是p=2的欧氏距离(欧几里德度量)。
  • metric_params : dict,optional(默认=None);距离公式的其他关键参数,这个可以不管,使用默认的None即可。
  • n_jobs : int或None,可选(默认=None);并行处理设置。默认为1,临近点搜索并行工作数。如果为-1,那么CPU的所有cores都用于并行工作。

上图为分类结果,下图为回归结果。

  • 优点:简单,易于理解,易于实现,无需参数估计,无需训练;对异常值不敏感(个别噪音数据对结果的影响不是很大);适合对稀有事件进行分类;适合于多分类问题(multi-modal,对象具有多个类别标签),KNN要比SVM表现要好;
  • 缺点:对测试样本分类时的计算量大,内存开销大,因为对每一个待分类的文本都要计算它到全体已知样本的距离,才能求得它的K个最近邻点。目前常用的解决方法是事先对已知样本点进行剪辑,事先去除对分类作用不大的样本;可解释性差,无法告诉你哪个变量更重要,无法给出决策树那样的规则;K值的选择:最大的缺点是当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。该算法只计算“最近的”邻居样本,某一类的样本数量很大,那么或者这类样本并不接近目标样本,或者这类样本很靠近目标样本。无论怎样,数量并不能影响运行结果。可以采用权值的方法(和该样本距离小的邻居权值大)来改进;KNN是一种消极学习方法、懒惰算法。

7.多层感知器(神经网络)

import sklearn# 分类
model = sklearn.neural_network.MLPClassifier(solver=’sgd’, activation=’relu’,
alpha=1e-4,hidden_layer_sizes=(50,50),
random_state=1,max_iter=10,learning_rate_init=.1)# 回归
model = sklearn.neural_network.MLPRegressor(solver='sgd', activation='relu', alpha=1e-4, hidden_layer_sizes=(50,50), random_state=1,
max_iter=10,learning_rate_init=.1)
  • hidden_layer_sizes:例如hidden_layer_sizes=(50, 50),表示有两层隐藏层,第一层隐藏层有50个神经元,第二层也有50个神经元。
  • activation :激活函数,{‘identity’, ‘logistic’, ‘tanh’, ‘relu’}, 默认relu;                                      identity:f(x) = x;                              logistic:其实就是sigmod,f(x) = 1 / (1 + exp(-x));tanh:f(x) = tanh(x);                         relu:f(x) = max(0, x)
  • solver:权重优化器,{‘lbfgs’, ‘sgd’, ‘adam’}, 默认adam
  • lbfgs:quasi-Newton方法的优化器
  • sgd:随机梯度下降
  • adam:机遇随机梯度的优化器;注意:默认solver ‘adam’在相对较大的数据集上效果比较好(几千个样本或者更多),对小数据集来说,lbfgs收敛更快效果也更好。
  • alpha :float,可选的,默认0.0001,正则化项参数
  • batch_size : int , 可选的,默认’auto’,随机优化的minibatches的大小batch_size=min(200,n_samples),如果solver是’lbfgs’,分类器将不使用minibatch
  • learning_rate:学习率,用于权重更新,只有当solver为’sgd’时使用,{‘constant’,’invscaling’, ‘adaptive’},默认constant;
  • ‘constant’: 有’learning_rate_init’给定的恒定学习率;
  • ‘incscaling’:随着时间t使用’power_t’的逆标度指数不断降低学习率learning_rate_ ,effective_learning_rate = learning_rate_init / pow(t, power_t);
  • ‘adaptive’:只要训练损耗在下降,就保持学习率为’learning_rate_init’不变,当连续两次不能降低训练损耗或验证分数停止升高至少tol时,将当前学习率除以5.
  • power_t: double, 可选, default 0.5,只有solver=’sgd’时使用,是逆扩展学习率的指数.当learning_rate=’invscaling’,用来更新有效学习率。
  • max_iter:int,可选,默认200,最大迭代次数。
  • random_state:int 或RandomState,可选,默认None,随机数生成器的状态或种子。
  • shuffle: bool,可选,默认True,只有当solver=’sgd’或者‘adam’时使用,判断是否在每次迭代时对样本进行清洗。
  • tol:float, 可选,默认1e-4,优化的容忍度
  • learning_rate_int:double,可选,默认0.001,初始学习率,控制更新权重的补偿,只有当solver=’sgd’ 或’adam’时使用。

由于鸢尾花数据集数据量过少,对于神经网络算法,这次使用手写数据集进行分类训练:

from sklearn.datasets import load_digits
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn import metricsdata = load_digits()
x = data.data
y = data.target
print(x.shape, y.shape)
stander = MinMaxScaler()
x = stander.fit_transform(x)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3)clf = MLPClassifier(hidden_layer_sizes=(100, 100))
clf.fit(x_train, y_train)
y_pred = clf.predict((x_test))
print("训练集评分:", clf.score(x_train, y_train))
print("测试集评分:", clf.score(x_test, y_test))
print("混淆矩阵:")
print(metrics.confusion_matrix(y_test, y_pred))
print("分类报告:", metrics.classification_report(y_test, y_pred))
print("W权重:", clf.coefs_[:1])
print("损失值:", clf.loss_)

训练结果:

  • 优点:数据越多神经网络的表现越好,数据足够的情况下,神经网络的性能可以胜过几乎其他所有的传统算法。
  • 缺点:可解释性差,神经网络是如何以及为什么会产生一定的输出很难显示出来;神经网络比传统算法的计算代价更高,计算能力很大程度上取决于数据的大小,同时也取决于网络的深度和复杂程度。

机器学习流程及详细内容(4)相关推荐

  1. 机器学习流程及详细内容(2)

    一般流程:数据收集.整理→数据预处理与特征工程(数据清理.集成.规约.变换.特征提取.筛选)→模型的选择与建立→模型的评估与优化. 数据清洗.集成.规约.变换:pandas常用操作以及前文的sklea ...

  2. DocuWare平台——用于文档管理和工作流程自动化的内容服务平台详细介绍(上)

    DocuWare平台--用于文档管理和工作流程自动化的内容服务平台 成功实现办公自动化所需的一切 DocuWare 是一个先进的平台,可让您集中.快速.有效地管理.处理和利用业务信息. 我们的文档管理 ...

  3. Ubuntu:Ubuntu下安装Anaconda和Tensorflow的简介、入门、安装流程之详细攻略

    Ubuntu:Ubuntu下安装Anaconda和Tensorflow的简介.入门.安装流程之详细攻略 目录 安装流程 1.安装nvidia显卡驱动 2.安装cuda8 3.安装Cudnn 4.Ana ...

  4. 职称计算机证书 评中级职称,软考证书如何申请评职称及职称申请流程的详细介绍...

    我们很多考友参加软考.比如信息系统项目管理师和系统集成项目管理工程师考试,目的都是为了评职称,那么在拿到软考证书后,很多人最关心的一个问题就是关于职称评聘问题,今天就以软考证书如何申请评职称及职称申请 ...

  5. Py之scikit-learn:机器学习sklearn库的简介、六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类)、安装、使用方法(实际问题中如何选择最合适的机器学习算法)之详细攻略

    Py之scikit-learn:机器学习sklearn库的简介(组件/版本迭代).六大基本功能介绍(数据预处理/数据降维/模型选择/分类/回归/聚类).安装.使用方法(实际问题中如何选择最合适的机器学 ...

  6. 机器学习怎么学?机器学习流程

    人们在使用机器学习的时候,把很大的精力放在了选择算法.优化算法上面,其实算法的选择只是机器学习其中的一个步骤,但是机器学习其他的步骤也是很关键的,尤其是作为产品经理,了解这个机器学习流程也是至关重要的 ...

  7. 新手教程:建立网站的全套流程与详细解释

    新手教程:建立网站的全套流程与详细解释 你要是 Baidu 这个话题,得到的结果八成都是广告--他们都会告诉你,"嘿,我(或某公司)这里可以建网站,傻瓜式的哟,快来投奔我吧!" 新 ...

  8. PMP报考相关详细内容整理

    PMP报考相关详细内容整理 一.考试简介 二.PMP 入门知识 三.考试报名 四.报名流程 1)PMP 英文报名 2)审核 3)中文报名 4)在线支付费用 付费实现通道 五.考试费用 六.成绩及分数 ...

  9. 计算机怎么审单流程,通关一体化的具体流程「详细」

    通关一体化的具体流程「详细」 通关一体化,简单说就是"多地通关,如同一关",比如有的企业在一个地方,但是货物的进出口可能在另外一个城市,原来海关的分布是按照属地化的,一个地方的海关 ...

  10. Xilinx FPGA 开发流程及详细说明

    本系列将带来FPGA的系统性学习,从最基本的数字电路基础开始,最详细操作步骤,最直白的言语描述,手把手的"傻瓜式"讲解,让电子.信息.通信类专业学生.初入职场小白及打算进阶提升的职 ...

最新文章

  1. 使用leangoo实现多泳道看板任务
  2. Linux 内核超时导致虚拟机无法正常启动
  3. qt tableWidget 表格控件使用
  4. 成长 | 《大厂晋升指南》学习总结(下)
  5. WangEdit富文本编辑器增加上传视频功能
  6. 【Docker 命令】- images命令
  7. OLTP与OLAP介绍
  8. 吴恩达深度学习笔记2.1 二分分类
  9. python两组数的差异 pca_python – scikit KernelPCA不稳定的结果
  10. 2. Windows编程基础
  11. 通信技术专业技术人员考试 动力与环境_中级通信工程师动力与环境考试大纲...
  12. 关于一些初级ACM竞赛题目的分析和题解(一)。
  13. 6 检验并打印魔方矩阵c语言,检验并打印魔方矩阵
  14. Dubbo实战入门,良心详解之作
  15. excel实用快捷键图表_使用快捷键创建Excel图表
  16. 【单调栈】P4147 玉蟾宫
  17. Datawhale组队学习21期_学术前沿趋势分析Task2_论文作者统计
  18. 问题解决:The connection to the server xxxxx:6443 was refused - did you specify the right host or port?
  19. 【IOS】Object-C 中的Selector 概念
  20. 通信的数学理论_《香农传》告诉你为什么要学好数学

热门文章

  1. java日期函数_java常用日期函数总结
  2. 201671010426 孙锦喆 实验二词频统计软件项目报告
  3. 存储珍贵的数据和资源的好选择,铁威马NAS F2-221折腾体验
  4. 泰戈尔专集:飞鸟集·新月集·园丁集(美冠纯美阅读书系·外国卷) 读后感
  5. 微信公众号开发:账号申请与接入
  6. 服务器网络连接显示100m,本地连接速度是1G200M的宽带为什么只有100M网速
  7. Git查看本地配置信息
  8. NBA20-21赛季数据分析 | Python数据分析及可视化实战
  9. 无刷直流电机学习笔记5
  10. c语言编程开发app,C语言编程app