精华内容
下载资源
问答
  • 机器学习实验.zip

    2019-07-15 21:45:37
    机器学习实验,内含实验指导书(PPT与Word)和参考代码,包括线性回归模型、支持向量机模型、贝叶斯分类以及基于tensorflow实现cnn。
  • 吴恩达机器学习实验+答案,已经编译验证过,需要对应报告的话,请私信。
  • 机器学习实验报告

    2016-03-06 18:18:39
    机器学习实验报告,包括搜索树,kmeans算法等六个机器学习算法以及实现源码,实现源码见后附录。
  • 机器学习是一门多学科交叉专业,涵盖概率论知识,统计学知识,近似理论知识和复杂算法知识,使用计算机作为工具并致力于真实实时的模拟人类学习方式, 并将现有内容进行知识结构划分来有效提高学习效率。 [1]
  • 山东大学计算机科学与技术学院机器学习课程的实验报告
  • 燕大软件机器学习实验报告,六个模型学习,实验报告下载了就能用,很方便,下载就行,直接用,燕大嘞。鸢尾花,波士顿,猫狗分类什么的
  • 山东大学计算机科学与技术学院机器学习课程的实验报告
  • 机器学习实验报告.pdf

    2020-09-10 00:04:27
    机器学习 课内实验报告 1 ID 算法实现决策树 2015 - 2016 学年 第 2 学期 智能科学与技术 专业 班级 智能 1301 班 学号 06133029 姓名 张争辉 精选文档 一实验目的 理解 ID3 算法的基本原理并且编程实现 二实验要求 ...
  • 机器学习关于Kmeans的实验报告,内含代码,实验是关于鹦鹉图片颜色聚类
  • 山东大学计算机学院机器学习课程的实验报告,本文是第八章的决策树的实验报告
  • 燕山大学《Python机器学习实验报告
  • Python机器学习实践

    千次阅读 2019-10-15 21:14:08
    前面几篇博文已经整理了Python做数据分析和建模以及机器学习基础知识。 这篇博文主要分享Python做数据分析和建模的实践案例应用。 分为两部分: 1、Python机器学习实践案例的算法总结。 见博文下方的算法总结...

    前面几篇博文已经整理了Python做数据分析和建模以及机器学习基础知识。

    这篇博文主要分享Python做数据分析和建模的实践案例应用。

    分为两部分:

    1、Python机器学习实践案例的算法总结。

         见博文下方的算法总结表格。

    2、案例和代码实现。

         每个案例单独用一篇博文来讲解逻辑和Python代码实现。点击对应的链接到相应的博文中去阅读。

        (1)朴素贝叶斯、费舍尔分类器模型(文档分类)

                ---引申 用gesim-word2vec实现词矢量化

        (2)优化算法模型:

                [1] 旅行行程优化问题

                [2] 住宿房间分配问题

        (3)决策树分类建模

        (4)分级聚类、K均值聚类

                  [1] 使用LSA潜在语义分析,聚类评论主题

        (5)KNN算法

                [1]数值预测、区间概率预测、概率密度图

                [2]协同过滤推荐简单实现

             ---引申  [3] 协同过滤推荐-pyspark实现

            ---引申  [4]spark的安装和Jupyter使用

        (6)寻找独立特征-非负矩阵因式分解

        (7)支持向量机

        (8)神经网络

        (9)特征工程

              [1]受限波兹曼机RBM在机器学习中的使用

              [2]在机器学习pipeline中同时使用PCA和LDA

              [3]线性判别式LDA的两种实现方式

              [4]主成分分析PCA的两种实现方式

              [5]用PCA、LDA、LR做人脸识别

     

    机器学习实践案例算法总结
    算法算法描述/原理概述适用的数据集类型Python代码实现的主要步骤优缺点说明
    贝叶斯分类器根据贝叶斯公式:P(cat|item) = P(item|cat)*P(cat)/P(item),
    其中,P(item|cat) = P(feature|cat)*P(feature|cat)*P(feature|cat)*…
    适应于所有能转换成一组特征列表的数据集。1、定义特征提取函数getfeature
    2、利用样本对分类器进行训练,得到记录了特征和某个特定分类相关联的数字概率P(feature|(cat)
    3、分类预测(朴素贝叶斯分类器)
    优点:
    1、训练和分类计算的速度快
    2、支持增量式的训练
    3、特征的概率值被保存,所以分类学习的解释相对简单
    缺点:
    1、无法处理特征组合会产生分类结果影响的情况
    决策树分类器从根部开始构造决策树,在每一步中都会选择一个属性,利用该属性以最佳的可能方式对数据进行拆分。
    对于构造完成的决策树,从树的根部节点开始,对每一个节点的判断条件进行检查,走相应的yes or no 分支直至叶节点,即代表新数据的预测分类
    适应于数值型或者名词性的有分类结果的数据集1、创建决策树。
    熵、基尼不纯度衡量集合的混乱、不纯程度。信息增益来衡量一次拆分的好坏。
    2、决策树剪枝
    3、决策树显示--树状图/文本打印
    4、决策树分类
    优点:
    1、易于对模型的解释和理解。重要的判断因素都在靠近根部的位置。
    2、能处理变量之间的相互影响。
    缺点:
    1、不擅长对数值结果的预测。
    2、不支持增量式的训练。
    神经网络    
    支持向量机SVM    
    K最近邻算法KNN对一个待预测的新数据项,将其与已经知道结果值的数据项进行比较,从中找出最为接近的若干项,并根据距离远近求其加权平均值以得到最终的预测结果。可以做数值预测的数据集1、对变量进行缩放处理和交叉验证
    2、给出一个距离度量算法/相似度度量算法
    3、加权KNN算法预测
    优点:
    1、简单易懂 2、合理的数据缩放量不但可以改善预测效果,还能知道预测过程中各个变量的重要程度。3、新的数据可以随时被添加进来,是一种online的技术。
    缺点:
    1、计算低效。每一个待预测项必须和所有其他数据进行比较。2、寻找合理的缩放因子的过程很乏味、计算和评估的计算工作量很大。
    分级聚类它是构造一颗由所有数据项构成的树的过程。
    工作方式:寻找两个距离最接近的数据项,将它们合二为一,新聚类的"位置"等于原两个数据项位置的均值。重复此过程,直到每个数据项都被包含在了一个大的聚类中为止。
    任何一个具有一个或多个数值属性的数据集1、给出一个相关系数度量方法
    2、分级聚类
    3、绘制分级聚类树状图
    优点:
    1、层级结构可以显示为树状图的形状,易于解读
    2、面对一个全新的数据集,并不清楚想要多少群组时可通过分级聚类观察出哪些群组最接近
    K-Means聚类它是将数据拆分到不同群组的方法。
    工作方式:随机产生K个中心点的位置,将每个数据项都分配到距离最近的中心点。将中心位置移到分配给原中心点的所有项的平均位置处。重复上述聚类步骤。直到中心位置不再变化或达到某阈值。
    任何一个具有一个或多个数值属性的数据集1、给出想要的群组数量
    2、给出一个相关系数度量方法
    3、K-means聚类
    4、打印分类群组结果
    优点:
    1、聚类得到的群组易于打印和识别
    模拟退火算法以一个随机推测的题解开始,以此为基准随机选择一个方向,找到另一个近似解,判断其成本值。如果新题解的成本值小,则替换原题解。如果成本值更大,则用概率觉得是否取代原题解。迭代至温度几乎为0时,返回题解。给定定义域和成本函数的优化问题1、确定变量定义域domain
    2、定义成本函数costf
     
    遗传算法以一组种群题解开始,筛选出其中成本值最低的精英题解,利用变异、交叉的修改方法将精英题解扩充到原种群大小,称新得到的这个种群为下一代。迭代至一定代数或成本值达到某阈值或种群不再改变,返回成本值最低的作为最优解。给定定义域和成本函数的优化问题1、确定变量定义域domain
    2、定义成本函数costf
     
    非负矩阵因式分解NMF    
    展开全文
  • 哈工大机器学习实验

    千次阅读 2020-01-14 08:55:43
    哈工大17级机器学习实验 共4个实验,全 GitHub 代码+报告:HIT-MachineLearning-Class17Lab 本课程实验对机器学习的课程学习和考试有很大帮助,请各位学弟学妹一定要自己实现全过程,不要只是抄来代码和报告,就应付...

    哈工大17级机器学习实验
    共4个实验,全
    GitHub 代码+报告:HIT-MachineLearning-Class17Lab
    本课程实验对机器学习的课程学习和考试有很大帮助,请各位学弟学妹一定要自己实现全过程,不要只是抄来代码和报告,就应付交差。
    以上,仅供参考

    展开全文
  • 从零开始学习机器学习视频教程

    万人学习 2017-12-04 22:38:30
    人工智能作为现在最为火热的领域,使得机器学习被越来越多的人所了解。机器学习难学,主要的难度在于算法模型多不好理解,各种各样的工具不知道如何使用,实际项目不知道如何开发。本门课程将系统入门机器学习,课程...
  • 完整的实现了机器学习算法——支持向量机(SVM),同时通过交叉验证求解最优C值
  • 机器学习应用实验手册 机器学习应用实验手册 机器学习应用实验手册
  • 计算学部《机器学习》课程 Lab1 实验报告 姓名 学号 班号 电子邮件 手机号码 1 实验目的 掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2范数...

    Gtihub仓库
    不想白嫖的就来这投个币吧

    在这里插入图片描述

    2020年春季学期
    计算学部《机器学习》课程


    Lab1 实验报告








    姓名
    学号
    班号
    电子邮件
    手机号码


    1 实验目的

    掌握最小二乘法求解(无惩罚项的损失函数)、掌握加惩罚项(2范数)的损失函数优化、梯度下降法、共轭梯度法、理解过拟合、克服过拟合的方法(如加惩罚项、增加样本)

    2 实验要求及实验环境

    2.1 实验要求

    1. 生成数据,加入噪声;

    2. 用高阶多项式函数拟合曲线;

    3. 用解析解求解两种loss的最优解(无正则项和有正则项)

    4. 优化方法求解最优解(梯度下降,共轭梯度);

    5. 用你得到的实验数据,解释过拟合。

    6. 用不同数据量,不同超参数,不同的多项式阶数,比较实验效果。

    7. 语言不限,可以用matlab,python。求解解析解时可以利用现成的矩阵求逆。梯度下降,共轭梯度要求自己求梯度,迭代优化自己写。不许用现成的平台,例如pytorch,tensorflow的自动微分工具。

    2.2 实验环境

    Windows10; python3.8.5; jupyter notebook

    3 设计思想

    由泰勒级数可知,足够高阶的多项式可以拟合任意的函数,所以本次实验使用多项式来拟合正弦函数 s i n ( 2 π x ) sin(2\pi x) sin(2πx)。在 m m m 阶多项式中,有 m + 1 m+1 m+1 个待定系数,这些系数(由低到高)组成的列向量记作 w w w。用最小二乘法确定 w w w,设 E ( w ) = 1 / 2 ∗ ( X w – Y ) T ( X w – Y ) E(w) = 1/2 * (Xw – Y)^T(Xw– Y) E(w)=1/2(XwY)T(XwY),其中, X X X 为多项式中各个未知项代入观测数据求得的矩阵,若记 X i X_i Xi X X X 的第 i i i 行的向量,则 X i [ j ] X_i[j] Xi[j] 为第 i i i 个观测数据 x i x_i xi j j j 次方,记有 n n n 组观测数据,多项式最高次为 m m m,易知 X X X的维度为 n ∗ ( m + 1 ) n*(m+1) n(m+1) Y Y Y 为观测标签向量, Y [ j ] Y[j] Y[j] 为第 j j j 组观测数据的标签值(即 y y y 值)。从而问题转化为:求向量 w w w,使得 E ( w ) E(w) E(w) 最小。

    3.1 生成数据

    根据输入的多项式阶数和训练集大小参数生成相应大小的数据集,根据输入的高斯分布的均值和标准差参数生成噪声,将噪声加入到数据集中,最后根据数据集生成训练集等数据。

    def generate_data(order, size, mu=0, sigma=0.05, begin=0, end=1):
        x = np.arange(begin, end, (end - begin) / size)
        guass_noise = np.random.normal(mu, sigma, size) # 高斯分布噪声
        y = np.sin(2 * np.pi * x) + guass_noise
        train_y = y.reshape(size, 1)
        train_x = np.zeros((size, order + 1))
        nature_row = np.arange(0, order+1))
    
        for i in range(size):
            row = np.ones(order + 1) * x[i]
            row = row ** nature_row
            train_x[i] = row
        return train_x, train_y, x, y
    

    3.2 最小二乘法求解析解(无正则项)

    E ( w ) = 1 2 ( X w − Y ) T ( X w − Y ) = 1 2 ( w T X T − Y ) ( X w − Y )          = 1 2 ( w T X T X w − w T X T Y − Y T X w + X T Y )   = 1 2 ( w T X T X w − 2 w T X T Y + X T Y ) E(\pmb{w})=\frac 1 2(\pmb {Xw}-\pmb Y)^T(\pmb{Xw}-\pmb Y)\\ \qquad\quad=\frac 1 2(\pmb w^T\pmb X^T-\pmb Y)(\pmb {Xw}-\pmb Y)\\ \qquad\qquad\qquad\qquad\qquad\;\;\;\;=\frac 1 2(\pmb w^T\pmb X^T\pmb X\pmb w-\pmb w^T\pmb X^T\pmb Y-\pmb Y^T\pmb X\pmb w+\pmb X^T\pmb Y)\\ \qquad\qquad\qquad\quad\,=\frac 1 2(\pmb w^T\pmb X^T\pmb{Xw}-2\pmb w^T\pmb X^T\pmb Y+\pmb X^T\pmb Y)\\ E(www)=21(XwXwXwYYY)T(XwXwXwYYY)=21(wwwTXXXTYYY)(XwXwXwYYY)=21(wwwTXXXTXXXwwwwwwTXXXTYYYYYYTXXXwww+XXXTYYY)=21(wwwTXXXTXwXwXw2wwwTXXXTYYY+XXXTYYY)


    ∂ E ∂ w = X T X w − X T Y = 0 \frac{\partial E}{\partial \pmb w} = \pmb X^T\pmb{Xw}-\pmb X^T\pmb Y =0 wwwE=XXXTXwXwXwXXXTYYY=0

    w = ( X T X ) − 1 X T Y \pmb w=(\pmb X^T\pmb X)^{-1}\pmb X^T\pmb Y www=(XXXTXXX)1XXXTYYY

    w = np.linalg.inv(np.dot(train_x.T, train_x)).dot(train_x.T).dot(train_y)
    

    3.3 最小二乘法求解析解(有正则项)

    E ~ ( w ) = 1 2 ( X w − Y ) T ( X w − Y ) + λ 2 ∣ ∣ w ∣ ∣ 2          = 1 2 ( w T X T − Y ) ( X w − Y ) + λ 2 w T w = 1 2 ( w T X T X w − w T X T Y − Y T X w + X T Y ) + λ 2 w T w = 1 2 ( w T X T X w − 2 w T X T Y + X T Y ) + λ 2 w T w \widetilde{E}(\pmb{w})=\frac 1 2(\pmb {Xw}-\pmb Y)^T(\pmb{Xw}-\pmb Y) + \frac\lambda 2 ||\pmb w||_2\\ \qquad\;\;\;\;=\frac 1 2(\pmb w^T\pmb X^T-\pmb Y)(\pmb {Xw}-\pmb Y) + \frac \lambda 2\pmb w^T\pmb w\\ \qquad\qquad\qquad\qquad\qquad=\frac 1 2(\pmb w^T\pmb X^TX\pmb w-\pmb w^T\pmb X^T\pmb Y-\pmb Y^T\pmb X\pmb w+\pmb X^T\pmb Y) + \frac \lambda 2\pmb w^T\pmb w\\ \qquad\qquad\qquad\quad=\frac 1 2(\pmb w^T\pmb X^T\pmb{Xw}-2\pmb w^T\pmb X^T\pmb Y+\pmb X^T\pmb Y) + \frac \lambda 2\pmb w^T\pmb w\\ E (www)=21(XwXwXwYYY)T(XwXwXwYYY)+2λwww2=21(wwwTXXXTYYY)(XwXwXwYYY)+2λwwwTwww=21(wwwTXXXTXwwwwwwTXXXTYYYYYYTXXXwww+XXXTYYY)+2λwwwTwww=21(wwwTXXXTXwXwXw2wwwTXXXTYYY+XXXTYYY)+2λwwwTwww


    ∂ E ~ ∂ w = X T X w − X T Y + λ w = 0 \frac{\partial \widetilde {E}}{\partial \pmb w} = \pmb X^T\pmb{Xw}-\pmb X^T\pmb Y + \lambda \pmb w=0 wwwE =XXXTXwXwXwXXXTYYY+λwww=0


    w = ( X T X + λ ) − 1 X T Y \pmb w=(\pmb X^T\pmb X + \lambda)^{-1}\pmb X^T\pmb Y www=(XXXTXXX+λ)1XXXTYYY

    w = np.linalg.inv(np.dot(train_x.T, train_x) +
                      lamda * np.eye(train_x.shape[1])).dot(train_x.T).dot(train_y)
    

    3.4 梯度下降法求优化解

    E ~ ( w ) = 1 2 ( X w − Y ) T ( X w − Y ) + λ 2 ∣ ∣ w ∣ ∣ 2 = 1 2 ( w T X T X w − 2 w T X T Y + X T Y ) + λ 2 w T w \widetilde{E}(\pmb{w})=\frac 1 2(\pmb {Xw}-\pmb Y)^T(\pmb{Xw}-\pmb Y) + \frac\lambda 2 ||\pmb w||_2\\ \qquad\qquad\qquad\quad=\frac 1 2(\pmb w^T\pmb X^T\pmb{Xw}-2\pmb w^T\pmb X^T\pmb Y+\pmb X^T\pmb Y) + \frac \lambda 2\pmb w^T\pmb w\\ E (www)=21(XwXwXwYYY)T(XwXwXwYYY)+2λwww2=21(wwwTXXXTXwXwXw2wwwTXXXTYYY+XXXTYYY)+2λwwwTwww

    w \pmb w www 求导
    ∂ E ~ ∂ w = X T X w − X T Y + λ w \frac{\partial \widetilde {E}}{\partial \pmb w} = \pmb X^T\pmb{Xw}-\pmb X^T\pmb Y + \lambda \pmb w wwwE =XXXTXwXwXwXXXTYYY+λwww
    设步长(学习率)为 α \alpha α,对 w \pmb w www 梯度下降,直到迭代结束或收敛
    w = w − α ⋅ ∂ E ~ ∂ w \pmb w =\pmb w - \alpha\cdot \frac {\partial \widetilde E} {\partial \pmb w} www=wwwαwwwE
    当新的损失值大于原来的损失值的时候,说明步长过大,此时将步长折半

    w = np.zeros((train_x.shape[1], 1))
    new_loss = abs(loss(train_x, train_y, w, lamda))
    for i in range(times):
        old_loss = new_loss
        gradient_w = np.dot(train_x.T, train_x).dot(w) - np.dot(train_x.T, train_y) + lamda * w
        old_w = w
        w -= gradient_w * alpha
        new_loss = abs(loss(train_x, train_y, w, lamda))
        if old_loss < new_loss: #不下降了,说明步长过大
            w = old_w
            alpha /= 2
        if old_loss - new_loss < epsilon:
            break
    

    3.5 共轭梯度法求优化解

    先令
    ∂ E ~ ∂ w = X T X w − X T Y + λ w = 0 \frac{\partial \widetilde {E}}{\partial \pmb w} = \pmb X^T\pmb{Xw}-\pmb X^T\pmb Y + \lambda \pmb w=0 wwwE =XXXTXwXwXwXXXTYYY+λwww=0
    则求 ( X T X + λ ) w = X T Y (\pmb X^T\pmb X + \lambda)\pmb w = \pmb X^T\pmb Y (XXXTXXX+λ)www=XXXTYYY 的解析解,记 A = X T X + λ A = \pmb X^T\pmb X + \lambda A=XXXTXXX+λ b = X T Y \pmb b = \pmb X^T\pmb Y bbb=XXXTYYY,则求使残差满足精度的 w \pmb w www

    A = np.dot(train_x.T, train_x) + lamda * np.eye(train_x.shape[1]) # n+1 * n+1
    b = np.dot(train_x.T, train_y) # n+1 * 1
    

    初始化 w 0 = 0 \pmb w_0 = 0 www0=0 r 0 = b \pmb r_0 = \pmb b rrr0=bbb p 0 = r 0 \pmb p_0 = \pmb r_0 ppp0=rrr0

    w = np.zeros((train_x.shape[1], 1)) #  初始化w为 n+1 * 1 的零阵
    r = b
    p = b
    

    r k \pmb r_k rrrk 不满足精度时,进入循环,对第 k k k 次循环,计算:

    a k = r k T r k p k T A p k w k = w k + a k p k r k + 1 = r k − a k A p k b k = r k + 1 T r k + 1 r k T r k p k + 1 = r k + 1 + b k p k a_k = \frac {\pmb r_k^T \pmb r_k}{\pmb p_k^T\pmb A\pmb p_k}\\ \pmb w_k = \pmb w_k + a_k\pmb p_k\\ \pmb r_{k+1} = \pmb r_k - a_k\pmb A\pmb p_k\\ b_k =\frac {\pmb r_{k+1}^T \pmb r_{k+1}}{\pmb r_k^T \pmb r_k}\\ \pmb p_{k+1} = \pmb r_{k+1} + b_k \pmb p_k ak=pppkTAAApppkrrrkTrrrkwwwk=wwwk+akpppkrrrk+1=rrrkakAAApppkbk=rrrkTrrrkrrrk+1Trrrk+1pppk+1=rrrk+1+bkpppk

    while True:
        if r.T.dot(r) < epsilon:
            break
        norm_2 = np.dot(r.T, r)
        a = norm_2 / np.dot(p.T, A).dot(p)
        w = w + a * p
        r = r - (a * A).dot(p)
        b = np.dot(r.T, r) / norm_2
        p = r + b * p
    

    4 实验结果分析

    4.1 不带正则项的解析解

    固定训练集大小为10,在不同多项式阶数下的拟合结果

    • 1阶: y = − 1.477 x + 0.7385 y = -1.477 x + 0.7385 y=1.477x+0.7385

    在这里插入图片描述

    • 3阶: y = 19.22 x 3 − 29.8 x 2 + 10.51 x − 0.1571 y = 19.22 x^3 - 29.8 x^2 + 10.51 x - 0.1571 y=19.22x329.8x2+10.51x0.1571
      在这里插入图片描述

    • 5阶: y = − 68.05 x 5 + 163 x 4 − 112 x 3 + 11.12 x 2 + 6.302 x − 0.07645 y =-68.05 x^5 + 163 x^4 - 112 x^3 + 11.12 x^2 + 6.302 x - 0.07645 y=68.05x5+163x4112x3+11.12x2+6.302x0.07645在这里插入图片描述

    • 9阶: y = 7480 x 9 − 24580 x 8 + 27680 x 7 − 7577 x 6 − 9072 x 5 + 8667 x 4 − 3041 x 3 + 459.6 x 2 − 18.49 x + 0.08736 y=7480 x^9 - 24580 x^8 + 27680x^7 - 7577 x^6 - 9072 x^5 + 8667 x^4 - 3041 x^3 + 459.6 x^2 - 18.49 x + 0.08736 y=7480x924580x8+27680x77577x69072x5+8667x43041x3+459.6x218.49x+0.08736在这里插入图片描述

    在1阶的时候,基本无法拟合,属于欠拟合,提高阶数,3阶的情况下拟合效果已经足够好,继续提高阶数,直到9阶时拟合函数图像完美的穿过了所有的训练集上的点,但是由于过于关注于“穿过训练集上所有的点”这一条件,导致函数的波动较大,反而难以拟合数据集所代表的函数 s i n ( 2 π x ) sin(2\pi x) sin(2πx)

    但是增加训练数据集可以有效地降低阶数过高带来的过拟合现象的影响,下图为不同训练集大小的9阶多项式拟合图像。

    • 训练集大小为20: y = − 6173 x 9 + 24930 x 8 − 40640 x 7 + . 4000 x 6 − 15200 x 5 + 3359 x 4 − 238.9 x 3 − 38.22 x 2 + 10.54 x + 0.1475 y = -6173 x^9 + 24930 x^8 - 40640 x^7 + .4000 x^6 - 15200 x^5 + 3359 x^4 - 238.9 x^3 - 38.22 x^2 + 10.54 x + 0.1475 y=6173x9+24930x840640x7+.4000x615200x5+3359x4238.9x338.22x2+10.54x+0.1475
      在这里插入图片描述

    • 训练集大小为50: y = 3482 x 9 − 14150 x 8 + 23430 x 7 − 20300 x 6 + 9831 x 5 − 2591 x 4 + 325.9 x 3 − 28.06 x 2 + 7.356 x + 0.08484 y= 3482 x^9 - 14150 x^8 + 23430 x^7 - 20300 x^6 + 9831 x^5 - 2591 x^4 + 325.9 x^3 - 28.06 x^2 + 7.356 x + 0.08484 y=3482x914150x8+23430x720300x6+9831x52591x4+325.9x328.06x2+7.356x+0.08484
      在这里插入图片描述

    • 训练集大小为100: y = − 3279 x 9 + 14850 x 8 − 27980 x 7 + 28350 x 6 − 16720 x 5 + 5838 x 4 − 1173 x 3 + 106.8 x 2 + 2.833 x + 0.002364 y=-3279 x^9 + 14850 x^8 - 27980 x^7 + 28350 x^6 - 16720 x^5 + 5838 x^4 - 1173 x^3 + 106.8 x^2 + 2.833 x + 0.002364 y=3279x9+14850x827980x7+28350x616720x5+5838x41173x3+106.8x2+2.833x+0.002364
      在这里插入图片描述

    从上面几张图可以看出,在训练集大小为10时,过拟合现象最为严重,随着训练集的增大,过拟合现象逐渐被消除,当训练集大小为100时,我们生成的拟合函数已经几乎完美拟合到了的原数据点的函数上。

    4.2 带正则项的解析解

    根据3.3中公式所描述的,我们需要确定一个最优的 λ \lambda λ,使用均方根来判断不同参数取值的拟合效果。

    训练集大小为10,验证集大小为20,拟合多项式阶为9,多次运行的拟合效果如下:

    通过多次运行的结果可以看出,随着 λ \lambda λ 取值的减小,拟合函数在训练集上的错误率逐渐减小,在 ( e − 40 , e − 30 ) (e^{-40}, e^{-30}) (e40,e30) 区间内的错误率几乎为0,而在验证集上,在 λ > e − 7 \lambda > e^{-7} λ>e7 时,随着取值的减小,拟合函数的错误率逐渐减小,但是在 λ < e − 15 \lambda < e^{-15} λ<e15 之后的验证集上的错误率开始上升,说明出现了过拟合现象。

    根据多次运行的结果可得最佳的 λ \lambda λ 取值范围大约为 ( e − 11 , e − 7 ) (e^{-11}, e^{-7}) (e11,e7)

    λ = e − 9 \lambda = e^{-9} λ=e9 ,在训练集大小为10,阶数为9的条件下的带惩罚项和不带惩罚项的拟合图像比较。

    在这里插入图片描述

    可以看到,加入正则项后有效的降低了过拟合现象。

    4.3 梯度下降求得优化解

    在梯度下降法中,学习率为0.01,根据4.2中的结果取 λ = e − 9 \lambda = e^{-9} λ=e9

    固定训练集大小为10,在不同多项式阶数下的拟合结果 (左图精度为 1 0 − 5 10^{-5} 105,右图精度为 1 0 − 6 ) 10^{-6}) 106)

    • 3阶,迭代次数:左=37005,右=116453
    • 5阶,迭代次数:左=17294,右=29646
    • 7阶,迭代次数:左=9435,右=78793
    • 9阶,迭代次数:左=23286,右=69858

    固定阶数为9,不同训练集大小下的拟合结果 (左图精度为 1 0 − 5 10^{-5} 105,右图精度为 1 0 − 6 ) 10^{-6}) 106)

    • 训练集大小为20,迭代次数:左=27609,右=49967
    • 训练集大小为50,迭代次数:左=20001,右=39570
    • 训练集大小为100,迭代次数:左=17010,右=29397

    从上面的图可以看出,同条件下精度为 1 0 − 6 10^{-6} 106的右图的拟合效果要显著强于精度为 1 0 − 5 10^{-5} 105下的拟合效果。

    随精度的升高,迭代次数变大;随多项式阶增大,迭代次数呈现下降趋势;训练集的大小对于迭代次数几乎没有影响,但仍然满足训练集越大拟合效果也好的结论。

    从上面的迭代次数还可以得出一个结论:无论精度是 1 0 − 5 10^{-5} 105还是 1 0 − 6 10^{-6} 106,它们的迭代次数的量级都在 1 0 5 10^5 105,与共轭梯度相比,性能很差。

    4.4 共轭梯度求得优化解

    在共轭梯度法中,根据4.2中的结果取 λ = e − 9 \lambda = e^{-9} λ=e9

    固定训练集大小为10,在不同多项式阶数下的拟合结果 (左图精度为 1 0 − 5 10^{-5} 105,右图精度为 1 0 − 6 ) 10^{-6}) 106)

    • 3阶,迭代次数:左=4,右=4
    • 5阶,迭代次数:左=5,右=5
    • 7阶,迭代次数:左=7,右=5
    • 9阶,迭代次数:左=5,右=5

    固定阶数为9,不同训练集大小下的拟合结果 (左图精度为 1 0 − 5 10^{-5} 105,右图精度为 1 0 − 6 ) 10^{-6}) 106)

    • 训练集大小为20,迭代次数:左=5,右=7
    • 训练集大小为50,迭代次数:左=5,右=7
    • 训练集大小为100,迭代次数:左=7,右=5

    从上面的图可以看出,同条件下精度为 1 0 − 6 10^{-6} 106的右图的拟合效果并未显著强于精度为 1 0 − 5 10^{-5} 105下的拟合效果,这与梯度下降的结果大相径庭。

    共轭梯度法的迭代次数受精度、多项式阶、训练集的大小的影响并不大,一直稳定在 ( 1 0 0 , 1 0 1 ) (10^0, 10^1) (100,101) 级别范围内。

    共轭梯度法同样满足训练集越大拟合效果也好的结论。

    4.5 四种方法拟合效果对比

    精度取 1 0 − 6 10^{-6} 106,训练集大小为10,不同多项式阶数的拟合效果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    5 结论

    在对正弦函数的多项式拟合中,多项式的次数越高,其模型能力越强,在不加正则项的情况下,高次多项式的拟合效果出现了过拟合,这是由于样本数量少但模型能力强导致的,模型拟合结果过分依赖数据集,而样本不足使得数据存在一定偶然性,这种强拟合能力可能无法拟合出正弦曲线的效果。所以增大数据集可以有效地解决过拟合问题。

    在目标函数中加入参数的惩罚项后,过拟合现象得到明显改善。这是由于参数增多时,往往具有较大的绝对值,加入正则项可以有效地降低参数的绝对值,从而使模型复杂度与问题匹配。所以对于训练样本限制较多的问题,增加惩罚项是解决过拟合问题的有效手段。

    在使用梯度下降时,由于我们的目标函数是二次的,只有一个极值点,即最值点,所以梯度下降的初值选取并不很重要。如果梯度下降步长设置的比较大,那么下降结果将在目标函数最值附近逐渐向上跳动,从而无法收敛。

    梯度下降相比共轭梯度收敛速度很慢,迭代次数很大,而共轭梯度的稳定性较差,更容易出现过拟合现象,但对于数据量较大复杂度较高的情况,共轭梯度显然要比梯度下降来的更优。

    展开全文
  • 机器学习-线性回归实验

    千次阅读 2020-08-15 14:35:56
    机器学习线性回归用scikit-learn和pandas学习线性回归1. 获取数据,定义问题2. 整理数据3. 准备数据4. 训练数据5. 模型评价尝试用不同的线性模型进行训练交叉验证6. 画图观察结果7. python程序完整源代码 用scikit-...

    用scikit-learn和pandas学习线性回归

    1. 获取数据,定义问题

    我们用UCI大学公开的机器学习数据来跑线性回归。
    数据的下载地址在这里:http://archive.ics.uci.edu/mi/machine-learning-databases/00294/ 下载后的数据可以发现是一个压缩文件,解压后有一个xlsx文件,用excel打开,另存为csv格式,之后用这个csv格式的文件来运行线性回归。
    在这里插入图片描述
    这是一个循环发电场数据,共有9568个样本数据,每个数据有5列: A T AT AT(温度)、 V V V(压力)、 A P AP AP(湿度)、 R H RH RH(压强)、 P E PE PE(输出电力)。我们不用纠结于每项的具体意义。

    我们的问题是得到一个线性的关系,对应PE是样本输出,而 A T 、 V 、 A P 、 R H AT、V、AP、RH ATVAPRH这四个是样本特征,机器学习的目的是得到一个线性回归模型,即:
    P E = θ 0 + θ 1 × A T + θ 2 × V + θ 3 × A P + θ 4 × R H PE= \theta_0+ \theta_1 \times AT+ \theta_2 \times V + \theta_3 \times AP + \theta_4 \times RH PE=θ0+θ1×AT+θ2×V+θ3×AP+θ4×RH

    而需要学习的就是 θ 0 , θ 1 , θ 2 , θ 3 , θ 4 \theta_0,\theta_1,\theta_2,\theta_3,\theta_4 θ0θ1θ2θ3θ4这5个参数。

    2. 整理数据

    打开这个csv可以发现数据已经整理好,没有非法数据,因此不需要做预处理。但是这些数据并没有归一化,也就是转化为均值0,方差1的格式。(scikit-learn在线性回归时会自动帮我们进行归一化)。
    打开JupyterNotebook。在Home页面导入数据集,别忘了点upload上传。然后新建一个Python3笔记。

    #导入相关类库
    import matplotlib.pyplot as plt #绘图库
    #设置插图,让它们在记事本可见
    %matplotlib inline
    import numpy as np
    import pandas as pd
    from sklearn import datasets, linear_model
    
    #用pandas读取数据
    data = pd.read_csv('ccpp.csv')
    data.describe()
    
    #查看数据的前5行
    data.head()
    
    #查看数据的后5行
    data.tail()
    
    #查看数据的维度
    data.shape
    
    #数据可视化,直方图显示
    data.hist()
    
    #散点矩阵图
    from pandas.plotting import scatter_matrix
    scatter_matrix(data)
    

    2.6数据可视化,直方图显示
    2.7散点矩阵图

    3. 准备数据

    该数据集有9568个样本,每个样本有5例。
    下面我们开始准备样本特征 X X X,我们用 A T , V , A P AT,V,AP ATVAP R H RH RH这4个列作为样本特征。

    X = data[['AT','V','AP','RH']]
    X.head()
    

    准备数据
    准备样本输出 y y y,我们用 P E PE PE作为样本输出。

    y = data[['PE']]
    y.head()
    

    划分训练集和测试集把 X X X y y y的样本组合划分成两部分,一部分是训练集,一部分是测试集。使用train_test_split函数,官方文档地址:
    https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split

    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test = train_test_split(X, y, random_state=1)
    

    参数:

    test_size:测试集大小。如果为浮点型,则在0.0-1.0之间,代表测试集的比例;如果为整数型,则为测试集样本的绝对数量;如果没有,则为训练集的补充。默认情况下,值为0.25。此外,还与版本有关。

    train_size:训练集大小。如果为浮点型,则在0.0-1.0之间,代表训练集的比例;如果为整数型,则为训练集样本的绝对数量;如果没有,则为测试集的补充。

    random_state:指定随机方式。一个整数或者andomState实例,或者None。如果为整数,则它指定了随机数生成器的种子;如果为RandomState实例,则指定了随机数生成器;如果为None,则使用默认的随机数生成器,随机选择一个种子。

    shuffle:布尔值。是否在拆分前重组数据。如果shuffle=False,则stratify必须为None。

    stratify:array-likeorNone。如果不是None,则数据集以分层方式拆分,并使用此作为类标签。

    返回值:拆分得到的train和test数据集。

    #查看下训练集和测试集的维度,可以看到75%的样本数据被作为训练集,25%的样本被作为测试集。
    print(X_train.shape)
    print(y_train.shape)
    print(X_test.shape)
    print(y_test.shape)
    

    4. 训练数据

    用scikit-learn的线性模型来拟合我们的问题。

    fromsklearn.linear_modelimportLinearRegression#普通线性回归模型,使用最小二乘法拟合数据
    linreg = LinearRegression()
    linreg.fit(X_train,y_train)
    

    线性回归fit函数用于拟合输入输出数据,调用形式为 m o d e l . f i t ( X , y , s a m p l e w e i g h t = N o n e ) : • X : X 为 训 练 向 量 ; • y : y 为 相 对 于 X 的 目 标 向 量 ; • s a m p l e w e i g h t : 分 配 给 各 个 样 本 的 权 重 数 组 , 一 般 不 需 要 使 用 , 可 省 略 。 注 意 : model.fit(X,y,sample_weight=None): •X:X为训练向量; •y:y为相对于X的目标向量; •sample_weight:分配给各个样本的权重数组,一般不需要使用,可省略。 注意: model.fit(X,y,sampleweight=None)X:Xy:yXsampleweight:使X , , y 以 及 m o d e l . f i t ( ) 返 回 的 值 都 是 2 − D 数 组 , 如 : 以及model.fit()返回的值都是2-D数组,如: model.fit()2Da=[[0]]$

    #拟合完毕后,查看得到的模型参数:
    print(linreg.intercept_)
    print(linreg.coef_)
    

    这样我们就得到了线性回归模型里面需要求得的5个参数值。

    5. 模型评价

    模型训练完以后,需要评估模型的好坏程度,对于线性回归来说,我们一般用均方差(MeanSquaredError,MSE)或者均方根差(RootMeanSquaredError,RMSE)在测试集上的表现来评价模型的好坏。如果我们用其他方法得到了不同的参数,需要选择模型时,就用MSE小的模型参数。

    #模型拟合测试集
    y_pred = linreg.predict(X_test)
    from sklearn import metrics
    #用scikit-learn计算MSE
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    #用scikit-learn计算RMSE
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    

    尝试用不同的线性模型进行训练

    加入正则化项,岭回归模型,L2范数调用Ridge函数同学们手动调整alpha的值,观察结果的变化。思考:alpha值大小跟过拟合、欠拟合的关系?

    from sklearn.linear_model import Ridge
    rdg = Ridge(alpha=10000,fit_intercept=True)
    rdg.fit(X_train,y_train)
    print(rdg.intercept_)
    print(rdg.coef_)
    

    #模型拟合测试集

    y_pred = rdg.predict(X_test)
    from sklearn import metrics
    #用scikit-learn计算MSE
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    #用scikit-learn计算RMSE
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    

    套索回归模型,L1范数
    调用LASSO函数

    from sklearn.linear_model import Lasso
    las = Lasso(alpha=0.1)
    las.fit(X_train,y_train)
    print(las.intercept_)
    print(las.coef_)
    

    #模型拟合测试集

    y_pred = las.predict(X_test)
    from sklearn import metrics
    #用scikit-learn计算MSE
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    #用scikit-learn计算RMSE
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    print("迭代次数:",las.n_iter_)
    

    交叉验证

    我们可以通过交叉验证来持续优化模型,采用10折交叉验证,即cross_val_predict中的cv参数为10:

    X = data[['AT','V','AP','RH']]
    y = data[['PE']]
    from sklearn.model_selection import cross_val_predict
    predicted=cross_val_predict(linreg,X,y,cv=10)
    #用scikit-learn计算MSE
    print("MSE:",metrics.mean_squared_error(y,predicted))
    #用scikit-learn计算RMSE
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y,predicted)))
    

    交叉验证10折交叉验证

    6. 画图观察结果

    画图观察真实值和预测值的变化关系,离中间的直线y=x越近的点,代表预测损失越低。

    fig,ax = plt.subplots()
    ax.scatter(y,predicted)
    ax.plot([y.min(),y.max()],[y.min(),y.max()],'k--',lw=4)
    #尝试将k--改为r--,r-,观察线型。查看某个函数的详细信息,使用help()函数。
    ax.set_xlabel('Measured')
    ax.set_ylabel('Predicted')
    plt.show()
    

    画图观察结果

    7. python程序完整源代码

    import matplotlib.pyplot as plt
    %matplotlib inline
    import numpy as np
    import pandas as pd
    from sklearn import datasets , linear_model
    
    data = pd.read_csv('ccpp.csv')
    
    data.describe()
    
    data.head()
    
    data.tail()
    
    data.shape
    
    data.hist()
    
    from pandas.plotting import scatter_matrix
    scatter_matrix(data)
    
    X = data[['AT','V','AP','RH']]
    X.head()
    
    y = data[['PE']]
    y.head()
    
    from sklearn.model_selection import train_test_split
    X_train , X_test , y_train , y_test = train_test_split(X , y , random_state=1)
    
    print (X_train.shape)
    print (y_train.shape)
    print (X_test.shape)
    print (y_test.shape)
    
    from sklearn.linear_model import LinearRegression
    linreg = LinearRegression()
    linreg.fit(X_train,y_train)
    
    print(linreg.intercept_)
    print(linreg.coef_)
    
    y_pred = linreg.predict(X_test)
    from sklearn import metrics
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))          9999999999999999999999
    
    from sklearn.linear_model import Ridge
    rdg = Ridge(alpha=8000,fit_intercept=True)
    rdg.fit(X_train,y_train)
    print(rdg.intercept_)
    print(rdg.coef_)
    
    y_pred = rdg.predict(X_test)
    from sklearn import metrics
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    
    from sklearn.linear_model import Lasso
    las = Lasso(alpha = 0.1)
    las.fit(X_train,y_train)
    print (las.intercept_)
    print (las.coef_)
    
    y_pred = las.predict(X_test)
    from sklearn import metrics
    print("MSE:",metrics.mean_squared_error(y_test,y_pred))
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y_test,y_pred)))
    print("迭代次数:",las.n_iter_)
    
    X = data[['AT','V','AP','RH']]                                            999999999999999999999999
    y = data[['PE']]
    from sklearn.model_selection import cross_val_predict
    predicted = cross_val_predict(linreg , X , y , cv=10)
    print("MSE:",metrics.mean_squared_error(y,predicted))
    print("RMSE:",np.sqrt(metrics.mean_squared_error(y,predicted)))
    
    fig , ax = plt.subplots()
    ax.scatter(y,predicted)
    ax.plot([y.min(),y.max()],[y.min(),y.max()],'k--',lw=4)
    ax.set_xlabel('Measured')
    ax.set_ylabel('Predictted')
    plt.show()
    
    展开全文
  • 机器学习实验

    千次阅读 2018-05-07 11:04:44
    一、 实验题目a) 对于数据集中类
  • 机器学习实验(一)—Linear Regression

    千次阅读 2017-01-16 21:24:19
    机器学习实验二–Logistic Regression 实验一是关于简单的线性回归的实验。下面是我的实验报告的截图(直接把word的内容撸过来,格式就全乱了,没有找到解决办法,直接上图吧,也是一种办法),后面给出工程和文档...
  • 机器学习实验实验报告

    千次阅读 2018-11-12 19:47:35
    一、 参数说明 1、在开始贝叶斯判定前,先要设置...先验概率在“sample.txt”文件中进行设置,具体sample.txt文件格式要求如下: 2、样例文件格式说明 文件开头是各个类的先验概率,有多少个类就应该有多少个先验概...
  • 概要本文是用Python编程语言来进行机器学习实验的第一篇。主要内容如下: 读入数据并清洗数据 探索理解输入数据的特点 分析如何为学习算法呈现数据 选择正确的模型和学习算法 评估程序表现的准确性 读入...
  • 机器学习 实验一 感知器及其应用

    千次阅读 2021-05-09 09:55:15
    实验
  • 机器学习项目实战

    千人学习 2019-12-11 15:40:27
    本课程通过一系列内容讲解和编码实战,按照由易到难,由浅入深的顺序展开, 让学员在实践中,依次对传统机器学习中的回归问题和分类问题, 基于传统机器学习的自然语言处理技术,神经网络和深度学习, 以及基于深度...
  • 机器学习实验报告——Linear Regression

    千次阅读 2014-06-30 23:16:59
    机器学习实验报告——Linear Regression  一、 实验要求 要求用梯度下降法对给定的数据X,Y进行线性拟合。给出迭代次数,拟合曲线。 二、 实验思路  模型的建立:  估计函数的假设:   其中,X为输入...
  • 附加包中是实验数据,详见博客:http://blog.csdn.net/hujingshuang/article/details/46274723
  • 机器学习项目的实验方法

    千次阅读 2018-07-27 15:17:18
    发现对于一些机器学习项目,在项目进行中往往会直接就开始编码实现,而没有一套完整的方法论和有实操性的流程,经过一些粗浅的研究,下面写出一些对于此的部分思考,或有参考借鉴之用。 实验开始前,需要清楚研究...
  • 1.2.3 利用fminunc学习参数 函数:optimset;fminunc % Set options for fminunc options = optimset( 'GradObj' , 'on' , 'MaxIter' , 400 ); % Run fminunc to obtain the optimal theta % This ...
  • 机器学习入门30天实战

    千人学习 2017-09-22 11:18:59
    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 系列课程包含Python机器学习库,机器学习经典算法原理推导,基于真实数据集案例实战3大模块。从入门开始进行机器学习原理推导,以通俗易懂为基础形象解读晦涩难懂...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,653
精华内容 75,061
关键字:

机器学习实验要求