人工智能-前言
"""
三大概念: 人工智能(AI) 机器学习(ML) 深度学习(DL)
人工智能:
仿智: 机器模拟代替人类
三者的关系:
机器学习是实现人工智能的一种途径
深度学习是机器学习的一种方法 发展而来
人工智能技术体系:
基于 统计学 的传统机器学习 方法
基于 神经网络的深度学习 方法
机器学习:
从数据中获取规律, 传入新数据 产生 新预测
深度学习:
大脑仿生
"""
1. 机器语言-发展史
"""
机器学习发展史
符号主义
专家系统占主导
1950年 图灵设计国际象棋程序
1962年 IBM 的跳棋程序战胜人类高手 -- 第一次
统计主义
主要用统计模型解决问题
1993年: 提出SVM
1997年: IBM 深蓝战胜卡斯帕罗夫 -- 第二次
神经网络
神经网络, 深度学习流派
2012年 AlexNet 深度学习开山之作
2016年 Google AplhaGO 战胜 李世石 -- 第三次
大规模预训练模型
2017年 自然语言处理NLP 的Transformer框架出现
2018年 Bert 和 GPT 的出现
2022年 ChatGPT 的出现, 进入大模型AIGC发展的阶段
2023年 国内 百模大战 AIGC 赋能千行百业
"""
2. 机器学习-内容
"""
AI发展三要素
数据 算法 算力 -- 相互作用 AI发展的基石
CPU: 主要适合 I\O 密集型的任务
GPU: 主要适合计算密集型任务
TPU: 专门针对大型网络训练而设计的一款处理器
样本 特征 标签
样本: 一行数据就是一个样本, 多个样本组成数据集, 有时一条样本被叫做一条记录
特征: 一列数据一个特征, 有时被称为属性
标签\目标: 模型要预测的一列数据
"""
3. 机器学习-算法分类
3.1 有监督学习-目标值连续
"""
有监督学习:
定义: 输入数据是由输入特征值和目标值所组成, 即输入的训练数据有标签的
数据集: 需要标注数据的标签
分类问题:
目标值 是不连续的 字符串
回归问题:
目标值 是连续的 整型
"""
from sklearn.linear_model import LinearRegression
import joblib
def linear_reg():
"""
训练 线性 模型
:return:
"""
x = [[80, 86], [82, 80], [85, 78], [90, 90], [86, 82], [82, 90], [78, 80], [92, 94]]
y = [84.2, 80.6, 80.1, 90, 83.2, 87.6, 79.4, 93.4]
line_reg = LinearRegression()
line_reg.fit(x, y)
print(f'line_reg.coef_-->{line_reg.coef_}')
print(f'line_reg.intercept_-->{line_reg.intercept_}')
predict_data = line_reg.predict([[80, 90]])
joblib.dump(line_reg, 'model/line_reg.bin')
return predict_data
def predictByModel(model_path):
"""
使用保存的模型 预测 标签
:param model_path: 模型路径
:return:
"""
eatimater = joblib.load(model_path)
predict_data = eatimater.predict([[90, 86]])
return predict_data
if __name__ == '__main__':
print(linear_reg())
print(predictByModel('model/line_reg.bin'))
3.2 有监督学习-目标值不连续
from sklearn.neighbors import KNeighborsClassifier
def knnClassifiy():
"""
使用knn算法模型 预测分类
:return:
"""
x = [[39, 0, 31],
[3, 2, 65],
[2, 3, 55],
[9, 38, 2],
[8, 34, 17],
[5, 2, 57],
[21, 17, 5],
[45, 2, 9]]
y = [0, 1, 2, 2, 2, 1, 0, 0]
knn_model = KNeighborsClassifier(n_neighbors=3)
knn_model.fit(x, y)
return knn_model.predict([[23, 3, 17]])
if __name__ == '__main__1':
print(knnClassifiy())
3.3 无监督学习
"""
无监督学习:
定义: 输入数据没有被标记, 即样本数据类别未知, 没有标签, 根据样本间的相似性, 对样本集聚类以发现事物内部结构和相互关系
"""
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
from sklearn.metrics import calinski_harabasz_score
import matplotlib.pyplot as plt
def kmeans(n):
"""
kmeans 构建模型 预测数据
:param n: 质心 数量
:return:
"""
x, y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]],
cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=2)
plt.figure()
kmeans_model = KMeans(n_clusters=n, init='k-means++', n_init='auto')
y_pred = kmeans_model.fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()
value_pred = calinski_harabasz_score(x, y_pred)
return value_pred
if __name__ == '__main__':
print(kmeans(2))
print(kmeans(3))
print(kmeans(4))
3.4 半监督学习 与 强化学习
"""
半监督学习:
工作原理: -- 大幅度降低标记成本
1. 让专家标注少量数据, 利用已经标记的数据训练出一个模型
2. 利用该模型去套用未标记的数据
3. 通过询问领域专家分类结果与模型分类结果做对比,
从而对模型做进一步改善和提高
强化学习:
机器学习的一个重要分支
应用场景: 里程碑 AlphaGo 围棋 各类游戏 对抗比赛 无人驾驶
基本原理:
构建四个要素:
Agent 代理
State 环境状态
Action 行动
Reward 奖励
"""
4. 机器学习-建模流程
"""
机器学习建模流程
获取用户数据 -> 数据基本处理 -> 特征工程 -> 机器学习 -> 模型评估
1. 获取经验数据: 图像数据 文本数据
2. 数据缺失值处理, 异常值处理
3. 特征提取, 特征预处理, 特征降维
4. 线性回归, 逻辑回归, 决策树, GBDT
5. 回归评测指标, 分类评测指标, 聚类评测指标
特征工程:
利用专业背景知识和技巧处理数据, 让机器学习算法效果最好
内容:
特征提取: 从原始数据中提取与任务相关的特征
特征预处理: 特征对模型产生的影响, 因量纲问题, 有些特征对模型影响大, 有些影响小
特征降维: 将原始数据的维度降低
特征选择: 原始数据特征很多, 但是对模型训练相关是其中 特征集合的子集
特征组合: 把多个特征合并成一个特征, 一般利用乘法或加法来完成
拟合:
机器学习领域, 用来表示模型对样本点的拟合情况
欠拟合:
模型在训练集上表现很差, 在测试集上表现也很差
原因:
模型过于简单
过拟合:
模型在训练集上表现很好, 在测试集表现很差
原因:
模型过于复杂, 数据不纯, 训练数据太少
泛化:
具体的, 个别的扩大为一般的能力
奥卡姆剃刀原则: -- 如无必要 勿增实体
给定两个具有相同泛化误差的模型, 倾向选择比较简单的模型
"""