Python机器学习入门指南

前言

机器学习 作为人工智能领域的核心组成,是计算机程序学习数据经验以优化自身算法,并产生相应的“智能化的”建议与决策的过程。

一个经典的机器学习的定义是:

A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.

1 机器学习概论

机器学习是关于计算机基于数据分布,学习构建出概率统计模型,并运用模型对数据进行分析与预测的方法。按照学习数据分布的方式的不同,主要可以分为监督学习和非监督学习

图片

1.1 监督学习

从有标注的数据(x为变量特征空间, y为标签)中,通过选择的模型及确定的学习策略,再用合适算法计算后学习到最优模型,并用模型预测的过程。

按照模型预测结果Y的取值有限或者无限的,可再进一步分为分类模型或者回归模型

图片

1.2 非监督学习:

从无标注的数据(x为变量特征空间),通过选择的模型及确定的学习策略,再用合适算法计算后学习到最优模型,并用模型发现数据的统计规律或者内在结构。

按照应用场景,可以分为聚类,降维和关联分析等模型。

图片

2 机器学习建模流程

图片

2.1 明确业务问题

明确业务问题是机器学习的先决条件,这里需要抽象出现实业务问题的解决方案:需要学习什么样的数据作为输入,目标是得到什么样的模型做决策作为输出。

(如:一个简单的新闻分类问题的场景,就是学习已有的新闻及其类别标签数据,得到一个文本分类模型,通过模型对每天新的新闻做类别预测,以归类到每个新闻频道。)

图片

2.2 数据选择:收集及输入数据

数据决定了机器学习结果的上限,而算法只是尽可能逼近这个上限。意味着数据的质量决定了模型的最终效果,在实际的工业应用中,算法通常占了很小的一部分,大部分工程师的工作都是在找数据、提炼数据、分析数据。数据选择需要关注的是:

① 数据的代表性:代表性差的数据,会导致模型拟合效果差;

② 数据时间范围:监督学习的特征变量X及标签Y如与时间先后有关,则需要明确数据时间窗口,否则可能会导致数据泄漏,即存在和利用因果颠倒的特征变量的现象。(如预测明天会不会下雨,但是训练数据引入明天温湿度情况);

③ 数据业务范围:明确与任务相关的数据表范围,避免缺失代表性数据或引入大量无关数据作为噪音;

2.3 特征工程:数据预处理及特征提取

特征工程就是将原始数据加工转化为模型可用的特征,按技术手段一般可分为:

① 数据预处理:缺失值/异常值处理,数据离散化,数据标准化等;

② 特征提取:特征表示,特征衍生,特征选择,特征降维等;

2.3.1 数据预处理

  • 异常值处理

    收集的数据由于人为或者自然因素可能引入了异常值(噪音),这会对模型学习进行干扰。

    图片

    通常需要处理人为引起的异常值,通过业务/技术手段(如3σ准则)判定异常值,再由(python、正则式匹配)等方式筛选异常的信息,并结合业务情况删除或者替换数值。

  • 缺失值处理

    数据缺失的部分,通过结合业务进行填充数值、不做处理或者删除。根据缺失率情况及处理方式分为以下情况:

    ① 缺失率较高,并结合业务可以直接删除该特征变量。经验上可以新增一个bool类型的变量特征记录该字段的缺失情况,缺失记为1,非缺失记为0;

    ② 缺失率较低,结合业务可使用一些缺失值填充手段,如pandas的fillna方法、训练随机森林模型预测缺失值填充;

    ③ 不做处理:部分模型如随机森林、xgboost、lightgbm能够处理数据缺失的情况,不需要对缺失数据做任何的处理。

  • 数据离散化

    数据离散化能减小算法的时间和空间开销(不同算法情况不一),并可以使特征更有业务解释性。

    离散化是将连续的数据进行分段,使其变为一段段离散化的区间,分段的原则有等距离、等频率等方法。

  • 数据标准化

    数据各个特征变量的量纲差异很大,可以使用数据标准化消除不同分量量纲差异的影响,加速模型收敛的效率。常用的方法有:

    ① min-max 标准化:

    将数值范围缩放到(0,1),但没有改变数据分布。max为样本最大值,min为样本最小值。

    图片

    ② z-score 标准化:

    将数值范围缩放到0附近, 经过处理的数据符合标准正态分布。u是平均值,σ是标准差。

    图片

2.3.2 特征提取

  • 特征表示

    数据需要转换为计算机能够处理的数值形式。如果数据是图片数据需要转换为RGB三维矩阵的表示。

图片

字符类的数据可以用多维数组表示,有Onehot独热编码表示、word2vetor分布式表示及bert动态编码等;

图片

  • 特征衍生

基础特征对样本信息的表述有限,可通过特征衍生出新含义的特征进行补充。特征衍生是对现有基础特征的含义进行某种处理(聚合/转换之类),常用方法如:

① 结合业务的理解做衍生:聚合的方式是指对字段聚合后求平均值、计数、最大值等。比如通过12个月工资可以加工出:平均月工资,薪资最大值 等等;

转换的方式是指对字段间做加减乘除之类。比如通过12个月工资可以加工出:当月工资收入与支出的比值、差值等等;

② 使用特征衍生工具:如Featuretools等;

  • 特征选择

特征选择筛选出显著特征、摒弃非显著特征。特征选择方法一般分为三类:

图片

① 过滤法:按照特征的发散性或者相关性指标对各个特征进行评分后选择,如方差验证、相关系数、IV值、卡方检验及信息增益等方法。

② 包装法:每次选择部分特征迭代训练模型,根据模型预测效果评分选择特征的去留。

③ 嵌入法:使用某些模型进行训练,得到各个特征的权值系数,根据权值系数从大到小来选择特征,如XGBOOST特征重要性选择特征。

图片

  • 特征降维

如果特征选择后的特征数目仍太多,这种情形下经常会有数据样本稀疏、距离计算困难的问题(称为 “维数灾难”),可以通过特征降维解决。常用的降维方法有:主成分分析法(PCA), 线性判别分析法(LDA)等。

图片

2.4 模型训练

模型训练是选择模型学习数据分布的过程。这过程还需要依据训练结果调整算法的(超)参数,使得结果变得更加优良。

  • 2.4.1 数据集划分

    训练模型前,一般会把数据集分为训练集和测试集,并可再对训练集再细分为训练集和验证集,从而对模型的泛化能力进行评估。

    ① 训练集(training set):用于运行学习算法。

    ② 开发验证集(development set)用于调整参数,选择特征以及对算法其它优化。常用的验证方式有交叉验证Cross-validation,留一法等;

    ③ 测试集(test set)用于评估算法的性能,但不会据此改变学习算法或参数。

    图片

  • 2.4.2 模型选择

    常见的机器学习算法如下:

    图片

    模型选择取决于数据情况和预测目标。可以训练多个模型,根据实际的效果选择表现较好的模型或者模型融合。

图片

模型选择

  • 2.4.3 模型训练

    训练过程可以通过调参进行优化,调参的过程是一种基于数据集、模型和训练过程细节的实证过程。超参数优化需要基于对算法的原理的理解和经验,此外还有自动调参技术:网格搜索、随机搜索及贝叶斯优化等。

2.5 模型评估

模型评估的标准:模型学习的目的使学到的模型对新数据能有很好的预测能力(泛化能力)。现实中通常由训练误差及测试误差评估模型的训练数据学习程度及泛化能力。

  • 2.5.1 评估指标

    ① 评估分类模型:常用的评估标准有查准率P、查全率R、两者调和平均F1-score 等,并由混淆矩阵的统计相应的个数计算出数值:

    图片

    混淆矩阵

    查准率是指分类器分类正确的正样本(TP)的个数占该分类器所有预测为正样本个数(TP+FP)的比例;

    查全率是指分类器分类正确的正样本个数(TP)占所有的正样本个数(TP+FN)的比例。

    F1-score是查准率P、查全率R的调和平均:

    图片

    ② 评估回归模型:常用的评估指标有RMSE均方根误差 等。反馈的是预测数值与实际值的拟合情况。

    图片

    ③ 评估聚类模型:可分为两类方式,一类将聚类结果与某个“参考模型”的结果进行比较,称为“外部指标”(external index):如兰德指数,FM指数 等;另一类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index):如紧凑度、分离度 等。

  • 2.5.2 模型评估及优化

    图片

    根据训练集及测试集的指标表现,分析原因并对模型进行优化,常用的方法有:

    图片

2.6 模型决策

决策是机器学习最终目的,对模型预测信息加以分析解释,并应用于实际的工作领域。

需要注意的是工程上是结果导向,模型在线上运行的效果直接决定模型的成败,不仅仅包括其准确程度、误差等情况,还包括其运行的速度(时间复杂度)、资源消耗程度(空间复杂度)、稳定性的综合考虑。

3  Python实战

# 这是一个简单的demo。使用iris植物的数据,训练iris分类模型,通过模型预测识别品种。
import pandas as pd# 加载数据集 
data = load_iris()  # sklearn.datasets
df = pd.DataFrame(data.data, columns=data.feature_names)
df.head()# 使用pandas_profiling库分析数据情况
import pandas_profilingdf.profile_report(title='iris')# 划分标签y,特征x
y = df['class']
x = df.drop('class', axis=1)#划分训练集,测试集
from sklearn.model_selection import train_test_split
train_x, test_x, train_y, test_y = train_test_split(x, y)# 模型训练
from xgboost import XGBClassifier# 选择模型
xgb = XGBClassifier(max_depth=1, n_estimators=1)xgb.fit(train_x, train_y)from sklearn.metrics import precision_score, recall_score, f1_score, accuracy_score, roc_curve, aucdef model_metrics(model, x, y, pos_label=2):"""评估函数"""yhat = model.predict(x)result = {'accuracy_score':accuracy_score(y, yhat),'f1_score_macro': f1_score(y, yhat, average = "macro"),'precision':precision_score(y, yhat,average="macro"),'recall':recall_score(y, yhat,average="macro")}return result# 模型评估结果
print("TRAIN")
print(model_metrics(xgb, train_x, train_y))print("TEST")
print(model_metrics(xgb, test_x, test_y))# 模型预测
xgb.predict(test_x)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Edabit 算法 ★☆☆☆☆☆】 Return Something to Me!

【Edabit 算法 ★☆☆☆☆☆】 Return Something to Me! strings language_fundamentals Instructions Write a function that returns the string "something" joined with a space " " and the given argument a. Examples giveMeSomething(“is bett…

打造属于自己的vue图标库

hfex-icon图标库 Install npm i -D hfex-icon主要提供2种使用方式 方式一 通过svg图标资源,借助unplugin-icons库将svg图标文件生成vue组件,然后通过vue组件的引入方式在vue中使用 unplugin-icons 兼容vue2和vue3 在vue.config.js的plugins中配置…

【C语言】进阶——程序编译

目录 一:🔒程序环境 程序的翻译环境和执行环境 💡1.1翻译环境 预编译阶段: 编译阶段: 汇编阶段: 链接阶段: 💡1.2运行环境 二:🔒预处理详解 &…

文件夹图片相似图片检测并删除相似图片

项目开源地址 pip install imagededupgit clone https://github.com/idealo/imagededup.git cd imagededup pip install "cython>0.29" python setup.py installQuick Start from imagededup.methods import PHash phasher PHash()# Generate encodings for all…

[Spring]为什么Spring动态代理默认使用CGlib,而不是JDK代理?

文章目录 原因一:CGlib不需要接口原因二:CGlib效率高原因三:JDK代理会导致注解失效如果希望使用JDK代理扩展AOP in Spring Boot, is it a JDK dynamic proxy or a Cglib dynamic proxy?SpringSpringBoot 原因一:CGlib不需要接口 …

[AUTOSAR][网络管理] 实战网络管理

文章目录 一、简介(1) 睡眠模式(2) 预睡眠模式(3) 网络模式① 重复报文状态② 常规操作状态③ 准备睡眠状态二、目录介绍三、实现方法(1)can_nm 网络管理硬件层网络管理参数代码实现思路(2)app_nm 网络网络业务层四、测试方法(1) 网络报文唤醒(2) 诊断报文唤醒五、示例…

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测

分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测 目录 分类预测 | Matlab实现WOA-BiLSTM鲸鱼算法优化双向长短期记忆神经网络的数据多输入分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-BiLSTM鲸鱼算法…

力扣每日一题53:最大子数组和

题目描述: 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 输入:nums [-2,1,-3,4,-1,2,1,…

oracle-AWR报告生成方法

AWR报告生成方法 1. 以oracle用户登陆服务器 2. 进入到要保存awr报告的目录 3. 以sysdba身份连接数据库 sqlplus / as sysdba4. 执行生成AWR报告命令 ?/rdbms/admin/awrrpt.sql5. 选择AWR报告的文件格式 6. 选择生成多少天的AWR报告 7. 选择报告的快照起始和结束ID 8. 输入生…

MongoDB深度学习

MongoDB的简介 什么是MongoDB? MongoDB是一个基于分布式文件存储的数据库,由C语言编写。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的,它支持的数据结构非常松散&…

面试算法31:最近最少使用缓存

题目 请设计实现一个最近最少使用(Least Recently Used,LRU)缓存,要求如下两个操作的时间复杂度都是O(1)。 get(key):如果缓存中存在键key,则返回它对应的值…

【二维差分】ICPC南京 A

https://codeforces.com/gym/104128/problem/A 题意 思路 二维差分经典模型 考虑如果没有洞那么经历操作之后会剩下什么样子的袋鼠。发现上下左右移动可以看成是边界在移动,边界一直保持一个原初的矩形形状,而且上下移动和左右移动没有任何关系。一旦…

【LeetCode刷题(数据结构与算法)】:将二叉搜索树转化为排序的双向链表

将一个 二叉搜索树 就地转化为一个 已排序的双向循环链表 对于双向循环列表,你可以将左右孩子指针作为双向循环链表的前驱和后继指针,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点 特别地,我们希望可以 就地 完…

LAXCUS分布式操作系统是怎么实现的?

一直有网友要求讲讲LAXCUS分布式操作系统是怎么实现的,其实LAXCUS分布式操作系统的设计研发,涉及各种基础技术和底层架构,研发过程很漫长,一直在坚持,实现过程也非常复杂,尤其重要的是要保证运行过程&#…

前端 TS 快速入门之二:接口

1. 接口有什么用 通过 interface 定义接口。 检测对象的属性,不会去检查属性的顺序,只要相应的属性存在并且类型也是对的就可以。 interface IPerson {name: string;age: number; } function say(person: IPerson): void {console.log(my name is ${pers…

Elasticsearch 8.9 Master节点处理请求源码

大家看可以看ElasticSearch源码:Rest请求与Master节点处理流程(1) 这个图非常好,下午的讲解代码在各个类和方法之间流转,都体现这个图上 一、Master节点处理请求的逻辑1、节点(数据节点)要和主节点进行通讯&#xff0…

C语言常量

常量的概念 常量: 在程序运行期间不可以该改变的量 作用: 用于记录程序中不可更改的数据 常量的五种表现形式 语法: 1、数值常量(整数型常量(整数)、实数型常量(小数)&#xff09…

C++中的智能指针:更安全、更便利的内存管理

在C++编程中,动态内存管理一直是一个重要且具有挑战性的任务。传统的C++中,程序员需要手动分配和释放内存,这往往会导致内存泄漏和悬挂指针等严重问题。为了解决这些问题,C++11引入了智能指针(Smart Pointers)这一概念,它们是一种高级的内存管理工具,可以自动管理内存的…

【数据结构】线性表(四)双向链表的各种操作(插入、删除、查找、修改、遍历打印)

目录 线性表的定义及其基本操作(顺序表插入、删除、查找、修改) 四、线性表的链接存储结构 1. 单链表 2. 循环链表 3. 双向链表 a. 双向链表节点结构 b. 创建一个新的节点 c. 在链表末尾插入节点 d. 在指定位置插入节点 e. 删除指定位置的节点…

LeetCode 2172. 数组的最大与和【状压DP,记忆化搜索;最小费用最大流】2392

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…