机器学习-概述

人工智能-前言

"""
三大概念: 人工智能(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 有监督学习-目标值连续

"""
有监督学习:
        定义: 输入数据是由输入特征值和目标值所组成, 即输入的训练数据有标签的
        数据集: 需要标注数据的标签
        分类问题:
            目标值 是不连续的 字符串
        回归问题: 
            目标值 是连续的 整型
"""
# 1.导入依赖包
from sklearn.linear_model import LinearRegression
import joblib


def linear_reg():
    """
    训练 线性 模型
    :return:
    """
    # 2.准备数据
    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]
    # 3.实例化 线性回归模型
    line_reg = LinearRegression()
    # 4.模型训练
    line_reg.fit(x, y)
    print(f'line_reg.coef_-->{line_reg.coef_}')
    print(f'line_reg.intercept_-->{line_reg.intercept_}')
    # 5.模型预测
    predict_data = line_reg.predict([[80, 90]])

    # 6.模型保存
    joblib.dump(line_reg, 'model/line_reg.bin')

    return predict_data


def predictByModel(model_path):
    """
    使用保存的模型 预测 标签
    :param model_path: 模型路径
    :return:
    """
    # 7.模型加载
    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 有监督学习-目标值不连续

# 1 导入依赖包
from sklearn.neighbors import KNeighborsClassifier


def knnClassifiy():
    """
    使用knn算法模型 预测分类
    :return:
    """
    # 2 准备数据  # 0-喜剧片 1-动作片 2-爱情片
    x = [[39, 0, 31],  # 0
         [3, 2, 65],  # 1
         [2, 3, 55],  # 2
         [9, 38, 2],  # 2
         [8, 34, 17],  # 2
         [5, 2, 57],  # 1
         [21, 17, 5],  # 0
         [45, 2, 9]]  # 0
    y = [0, 1, 2, 2, 2, 1, 0, 0]
    # 3 实例化模型
    knn_model = KNeighborsClassifier(n_neighbors=3)
    # 4 模型训练
    knn_model.fit(x, y)
    # 5 模型预测
    return knn_model.predict([[23, 3, 17]])


if __name__ == '__main__1':
    print(knnClassifiy())

3.3 无监督学习

"""
    无监督学习:
        定义: 输入数据没有被标记, 即样本数据类别未知, 没有标签, 根据样本间的相似性, 对样本集聚类以发现事物内部结构和相互关系
"""
# 1 导包 sklearn.cluster.KMeans sklearn.datasets.make_blobs
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:
    """
    # 2 创建数据集
    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)
    # 2-1 展示数据效果
    plt.figure()
    # plt.scatter(x[:, 0], x[:, 1], marker='o')
    # plt.show()
    # 3 实例化Kmeans模型并预测
    kmeans_model = KMeans(n_clusters=n, init='k-means++', n_init='auto')
    y_pred = kmeans_model.fit_predict(x)
    # 3-1 展示聚类效果
    plt.scatter(x[:, 0], x[:, 1], c=y_pred)
    plt.show()
    # 4 评估3种聚类效果好坏
    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. 回归评测指标, 分类评测指标, 聚类评测指标
    特征工程:
        利用专业背景知识和技巧处理数据, 让机器学习算法效果最好
        内容:
            特征提取: 从原始数据中提取与任务相关的特征
            特征预处理: 特征对模型产生的影响, 因量纲问题, 有些特征对模型影响大, 有些影响小
            特征降维: 将原始数据的维度降低
            特征选择: 原始数据特征很多, 但是对模型训练相关是其中 特征集合的子集
            特征组合: 把多个特征合并成一个特征, 一般利用乘法或加法来完成
            
    拟合:
        机器学习领域, 用来表示模型对样本点的拟合情况
    欠拟合:
        模型在训练集上表现很差, 在测试集上表现也很差
        原因:
            模型过于简单
    过拟合:
        模型在训练集上表现很好, 在测试集表现很差
        原因:
            模型过于复杂, 数据不纯, 训练数据太少
            
    泛化:
        具体的, 个别的扩大为一般的能力
    奥卡姆剃刀原则:  -- 如无必要 勿增实体
        给定两个具有相同泛化误差的模型, 倾向选择比较简单的模型
"""
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值