AI 最大的概念
ML 机器学习 是AI的一个研究方向, 一般指的就是软件编程
DL 深度学习, 是机器学习的一个子领域, 使用人工神经网络来解决问题
ML DL的区别
提到机器学习 一般就是指 传统的基于统计学的一些算法 (或者 没用神经网络)
DL 深度学习就是指使用了神经网络
为什么要学机器学习
从学习知识的角度, 从简单到复杂
还有一些领域在使用机器学习?
机器学习模型 = 数据 + 算法
样本 sample 一行数据就是一个样本
特征 feature 数据集中的一列数据就是一个特征, 需要注意, 特征一定要和目标相关(和当前模型要解决的问题有关联)
目标 label(标签)/target 模型要预测的值, 在训练数据中就是问题的答案列
训练集划分
数据划分成训练集和测试集
训练集用于模型的训练, 测试集用于模型的验证
训练集测试集要互斥
如果数据量有限(几百, 几千条), 做8:2 7:3划分 训练集数据量大一些, 测试集数据量小
如果 数据足够, 直接从业务数据中抽取就可以了
train
x_train 训练集的特征值
y_train 训练集的目标值
test
x_test 测试集的特征值
y_test 测试集的目标值
根据数据是否有标签
有监督 监督学习的算法, 要求数据一定要有目标值
回归问题: 目标值是连续取值的( 房价, 薪水, GDP, 销售收入)
分类问题: 目标值是类别型(二分类, 三分类, 多分类) 机器学习/深度学习 问题以分类问题居多
推荐算法 二分类问题
无监督 数据中没有目标值的概念, 只有特征
典型场景聚类
有些业务获得标签的成本太高, 可以采用无监督的方式来做
反欺诈
半监督 ( 了解)
一部分数据有标签
一部分数据没有标签
强化学习 (了解)
environment 环境
state 状态
action 行为
reward 反馈/奖励
agent代理
当前阶段, 重点学习的是监督学习算法
实际开发的任务中, 监督学习的分类问题是最常见的
①获取数据
②数据基本处理(空值, 异常, 重复)
③特征工程
对特征进行处理
机器学习算法, 对特征工程要求比较高
深度学习算法, 好多特征工程的任务, 都可以交给神经网络来做
④模型训练 (调参)
机器学习算法 能调的参数相对较少的
深度学习算法 调参更加重要
⑤模型评估
不同类别的算法模型有不同的评价方式
通过测试集对训练好的模型进行评价, 评价能够达到要求, 就可以上线
特征提取
特征预处理
特征降维
特征组合
特征筛选
在模型评价的时候, 会出现欠拟合, 过拟合现象
欠拟合: 训练集上表现差, 测试集上表现也差
训练集上表现差 使用训练集数据训练模型, 用相同的数据丢给模型, 输出结果, 和训练集目标做比较结果表现差
产生原因: 模型过于简单
解决欠拟合, 把模型搞复杂
过拟合: 训练集上表现好, 测试集上表现差
产生原因 : 模型过于复杂, 训练数据不够, 数据中有噪声
解决过拟合, 把模型搞简单
?
原理比较简单, 通过这个模型的学习主要是把机器学习流程串起来
熟悉sklearn的API基本套路
KNN K近邻
通过计算距离来判断样本之间的相似程度
距离越近两个样本就越相似, 就可以划归到一个类别中
基本流程
在数据集中, 我们选择一个样本要对它进行分类, 使用KNN算法
计算当前样本和其它样本, 特征取值之间的距离(最常用的就是欧式距离), 对距离进行排序(从小到大)
确定K值 : 通过离该样本最近的K个样本(欧式距离最小的K个)
比如当K = 5时, 我们就选择离这个样本最近的5个样本
通过这K个样本的类别确定当前样本的类别
投票, 少数服从多数
如果是回归问题, 这K个样本的取值的平均值就是最终的预测结果
K 就是当前算法的一个超参数
超参数是可以进行调整的
K的大小会影响到最终的结果
K越小 模型越复杂 容易受到数据中噪声的影响
K越大 模型越简单 受到数据分布的影响
当K = 样本数量的时候, 模型结果是确定的结果
# 1.工具包
from sklearn.neighbors import KNeighborsClassifier,KNeighborsRegressor
# from sklearn.neighbors import KNeighborsRegressor
# 2.数据(特征工程)
# 分类
x = [[0,2,3],[1,3,4],[3,5,6],[4,7,8],[2,3,4]]
y = [0,0,1,1,0]
# 创建算法对象 K近邻的分类器
knn = KNeighborsClassifier(n_neighbors=1)
# 算法模型对象 调用fit 模型训练
knn.fit(x,y) # X 训练集特征值 y 训练集目标值
# 使用训练好的模型进行预测
knn.predict([[4,4,5]])
# 准备数据 x 特征值
x = [[0,1,2],[1,2,3],[2,3,4],[3,4,5]]
# y 目标值
y = [0.1,0.2,0.3,0.4]
# 创建K近邻的回归器
knn = KNeighborsRegressor(n_neighbors=2)
# 模型训练 对于KNN来说, 就是把所有样本保存起来
knn.fit(x,y)
# 利用模型输出预测结果
knn.predict([[4,4,5]])
SKlearn 的API 都有固定的套路
创建算法模型对象
fit 模型训练
predict 使用训练好的模型进行预测
模型训练的时候, 使用的数据, 有几个特征, 是什么样的维度, 在predict的时候传入的数据需要有相同的维度
是特征工程的一个环节
应用场景:
涉及多个特征一起进行计算, 比如计算欧式距离
特征的取值范围, 差异较大 (量纲不统一)
归一化/标准化 可以把量纲不统一的特征, 缩放到同一取值范围内
需要注意的是
归一化会受到数据中异常值的影响, 当对数据质量没有把握的时候, 可以直接使用标准化
# 归一化
# 如果数据中有特别大的取值/特别小的取值 收入 10000小目标 0.00001个小目标
from sklearn.preprocessing import MinMaxScaler
x = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]
# 创建一个Scaler对象
scaler = MinMaxScaler()
# fit 就是在计算每一列特征的最大值和最小值, 并保存到scaler对象中
scaler.fit(x)
# Transform 变化, 利用上一步计算出来的 最大最小值, 作用到原始数据上, 得到缩放之后的结果
scaler.transform(x)
# 标准化
# 标准化没有固定取值范围, 基本上会在 -10 10
from sklearn.preprocessing import StandardScaler
x = [[90, 2, 10, 40], [60, 4, 15, 45], [75, 3, 13, 46]]
# 创建一个Scaler对象
scaler = StandardScaler()
# fit 就是在计算每一列特征的均值和方差
scaler.fit(x)
# Transform 变化, 利用上一步计算出来的 最大最小值, 作用到原始数据上, 得到缩放之后的结果
scaler.transform(x)