找回密码
 立即注册
搜索

一文详解机器学习,让机器学习人的学习方式

什么是机器学习?

机器学习,顾名思义,就是让机器进行学习。
机器学习是人工智能领域的一项技术,利用大数据训练算法模型,让机器进行预测或决策



比如,人类的学习就是模仿、归纳、不断练习。如果你出生在一个混血的家庭,你出生时就知道 “爸爸” 和 “dad” 代表同一个意思,因为只要叫 “爸爸” 或 “dad”,这个男人会做出应答,陪你玩耍。而叫 “妈妈” 或 “mom”,女人会给你喂奶。
当你有了相应的行为表示,这个世界会对你的行为做出反馈,这个过程就是学习。就像编程学习,老师教给你 Python 语法,使用样例,再练习一些题目,然后你掌握这些知识后就可以求解出新的问题。



机器学习VS传统算法

传统算法包括 贪心、搜索、动态规划等等,对于某一种问题都有唯一的确定的结果,是基于固定的逻辑和规则运算的。而机器学习是基于数据驱动的,尤其是具有可以处理未知数据的能力,传统算法是不具备的。
比如,如何判断一个人是否漂亮,这个因素特别多,我们归纳一下,比如,眼睛大小,鼻梁是否挺拔,眉毛形状,五官比例,如果用传统算法 if ... elif ... elif ... else 进行预测,是无法穷举的。
而机器学习可以通过大量的人脸图片,人为的告诉机器哪些是漂亮的,漂亮程度是多少,那么机器会自动提取人脸的特征,在新的人脸图片出现时,即使机器没有见过,也可以对人脸进行漂亮程度打分。



机器学习分类

主要可以分为有监督学习、无监督学习、半监督学习。
有监督学习

在已知数据输出的情况下对模型进行训练,根据输出进行调整、优化的学习方式叫做有监督学习。
比如,你做作业,如果错误,老师会指出问题,并告知正确答案,这个过程,你的学习就有一些进步。



或者我们给水果分类(给数据贴标签),告知机器哪些是苹果、哪些是香蕉、那些是橙子……如果机器将橙子误认为苹果,我们就可以指出来错误,机器就会重新调整参数,自我修正,自我进化。
无监督学习

没有正确答案情况下,让机器自己进行分类,发现数据中的模式、结构和关联关系。比如,有一组求职者简历信息,包括性别、年龄、学历和薪资。机器要自己找到年龄和学历对薪资的影响,以及根据当前行业判断性别的影响。制造业男性薪资会较高、美甲行业女性薪资一般较高。



半监督学习

先通过无监督学习划分类别,再人工标记,通过有监督学习方式预测输出。例如,机器先根据黄色和长条形状将香蕉分类,然后我们给这个类别贴标签为“香蕉”。
批量学习

将学习过程和应用过程分开,用全部训练数据来训练模型,然后在应用场景中进行预测,当预测结果不够理想时,重新回到学习过程,循环往复。
比如,一个武林高手闭关修炼,约一架,没打赢,然后再闭关十年,提升自己,十年后再约一架。
增量学习

将学习过程和应用过程统一起来,在应用同时,以增量方式不断学习新的内容,边训练、边学习。比如,张无忌,和少林高手对打,学习少林高手绝学打败对手,和武当派高手对打,学习武当派绝学打败对手,这就是增量。



注意:批量学习和增量学习与有监督、无监督、半监督学习并不是完全独立的。
机器学习一般过程

1.数据采集:手工采集、网站收集、爬虫爬取……
2.数据清洗:将误差较大的数据筛选掉,比如,统计初中生人均身高,收集到的数据为负数。
3.选择模型:选择合适的算法。
4.训练模型:用某只股票历史价格进行训练。
5.模型评估:在虚拟盘预测未来价格时计算收益率。
6.测试模型:小规模在实盘使用预测算法进行自动化交易。
7. 应用模型:在金融机构大面积使用该模型。
8.模型维护:当出现某些政治事件、极端黑天鹅事件,及时调整模型参数或者下架该模型,避免造成大的损失。
数据预处理常用方式

均值移除

让样本矩阵中每一列的平均值为 0,标准差为 1。
import numpy as npimport sklearn.preprocessing as spraw_sample = np.array([    [3.0, -100.0, 1000.0],    [0.0, 40, 30],    [1.23, 5, 400]])res = sp.scale(raw_sample)print(res)print(res.mean(axis=0))print(res.std(axis=0))输出:[[ 1.2912754  -1.37281295  1.3093339 ] [-1.14509328  0.98058068 -1.11752065] [-0.14618212  0.39223227 -0.19181325]][-1.11022302e-16 -5.55111512e-17 -9.25185854e-17][1. 1. 1.]范围缩放(一般是 0-1 之间)

首先,每个列的数减去最小值,然后除以该列数据的极差。
res = sp.minmax_scale(raw_sample)print(res)输出:[[1.        0.        1.       ] [0.        1.        0.       ] [0.41      0.75      0.3814433]]归一化 Normalize

归一化反映样本所占比率,用每个样本的每个特征值除以该样本的各个特征值绝对值之和。变换后的样本矩阵,每个样本点特征值绝对值之和为 1.
res = sp.normalize(raw_sample, norm="l1")# l1 表示除以向量中各个元素绝对值之和# l2 表示除以向量中各个元素平方之和print(res)输出:[[ 0.00271985 -0.09066183  0.90661831] [ 0.          0.57142857  0.42857143] [ 0.00302784  0.0123083   0.98466386]]二值化

实现给定一个阈值,如果超过阈值,表示为 1,未超过阈值,表示为 0。
import numpy as npimport sklearn.preprocessing as sp# 学生语、数、外考试分数raw_sample = np.array([    [80, 10, 90],    [59, 70, 59.9],    [61, 59.8, 82]])biner = sp.Binarizer(threshold=59.9)bin_samples = biner.transform(raw_sample)print(bin_samples)输出:[[1. 0. 1.] [0. 1. 0.] [1. 0. 1.]]注意:大于边界值为 1,小于等于边界值为 0,多用于图像处理。
缺点:二进制编码会导致信息损失,且不可逆。
独热编码

独热编码将一个具有 n 个可能取值的分类变量转化为一个长为 n 的二进制向量,其中只有一个元素为 1,其余元素都为 0。每个可能的取值都对应一个唯一的二进制向量,从而保持了原始变量的信息,并且使得它们可以被算法处理。
例如,如果有一个表示颜色的分类变量,包含红、蓝和绿三种取值,那么独热编码会将这个变量转换成长度为 3 的二进制向量,例如红色表示为 [1, 0, 0],蓝色表示为 [0, 1, 0],绿色表示为 [0, 0, 1]。
import numpy as npimport sklearn.preprocessing as spraw_sample = np.array([    [1, 3, 1],    [1, 4, 2],    [2, 5, 2]])hot_encode = sp.OneHotEncoder(sparse_output=False, dtype="int32")res = hot_encode.fit_transform(raw_sample)print(res)print(hot_encode.inverse_transform(res))输出:[[1 0 1 0 0 1 0] [1 0 0 1 0 0 1] [0 1 0 0 1 0 1]][[1 3 1] [1 4 2] [2 5 2]]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

大神点评3

回复

使用道具 举报

邦枝5葵 2024-4-30 13:55:13 显示全部楼层
非常看好未来的发展!
回复

使用道具 举报

新丰江边 2024-5-1 20:36:00 显示全部楼层
是爷们的娘们的都帮顶!大力支持
回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies