精华内容
下载资源
问答
  • 本文参考自《Tensorflow机器学习实战机器学习...#用tensorflow实现线性回归算法(单变量) #1 导入必要的编程库,创建计算图,加载数据集 import matplotlib.pyplot as plt import tensorflow as tf import numpy as
    本文参考自《Tensorflow机器学习实战机器学习指南》 使用的数据集是鸢尾花数据集,但是只是取它的两个特征,一个作为
    x,一个作为y,来拟合一条直线。
    #用tensorflow实现线性回归算法(单变量)
    
    
    #1 导入必要的编程库,创建计算图,加载数据集
    import matplotlib.pyplot as plt
    import tensorflow as tf
    import numpy as np
    from sklearn import datasets
    from tensorflow.python.framework import ops
    
    ops.get_default_graph()
    sess = tf.Session()
    iris = datasets.load_iris()
    
    x_vals = np.array([x[3] for x in iris.data])
    y_vals = np.array([y[0] for y in iris.data])
    
    
    #2 声明学习率,批量大小,占位符和模型变量
    learning_rate = 0.05
    batch_size = 25
    x_data = tf.placeholder(shape=[None, 1], dtype=tf.float32)
    y_target = tf.placeholder(shape=[None, 1], dtype=tf.float32)
    A = tf.Variable(tf.random_normal(shape=[1,1]))
    b = tf.Variable(tf.random_normal(shape=[1,1]))
    
    
    #3 增加线性模型,y=Ax+b.
    model_output = tf.add(tf.matmul(x_data, A), b)
    
    
    #4 声明L2损失函数,其为批量损失的平均值,初始化变量,声明优化器
    loss = tf.reduce_mean(tf.square(y_target - model_output))
    init = tf.global_variables_initializer()
    sess.run(init)
    my_opt = tf.train.GradientDescentOptimizer(learning_rate)
    train_step = my_opt.minimize(loss)
    
    
    #5 现在遍历迭代,并在随机选择的数据上进行模型训练,迭代100次,
    #  每25次迭代输出变量值和损失值,将其用于之后的可视化
    loss_vec = []
    for i in range(100):
         rand_index = np.random.choice(len(x_vals), size=batch_size)
         rand_x = np.transpose([x_vals[rand_index]])
         rand_y = np.transpose([y_vals[rand_index]])
         sess.run(train_step, feed_dict={x_data:rand_x, y_target:rand_y})
         temp_loss = sess.run(loss, feed_dict={x_data:rand_x, y_target:rand_y})
         loss_vec.append(temp_loss)
         if (i+1)%25 == 0:
              print('Step#' + str(i+1) +'A = ' + str(sess.run(A)) + 'b=' + str(sess.run(b)))
              print('Loss= ' +str(temp_loss))
              
    
    #6 抽取系数,创建最佳拟合直线
    [slope] = sess.run(A)
    [y_intercept] = sess.run(b)
    best_fit = []
    for i in x_vals:
         best_fit.append(slope*i+y_intercept)
         
         
    #7 这里绘制两幅图,第一幅是拟合的直线,第二幅是迭代100次的L2正则损失函数
    plt.plot(x_vals, y_vals, 'o', label='Data Points')
    plt.plot(x_vals, best_fit, 'r--', label='Best fit line', linewidth=3)
    plt.legend(loc='upper left')
    plt.title('Sepal Length vs Pedal Width')
    plt.xlabel('Pedal Width')
    plt.ylabel('Sepal Width')
    plt.show()
    
    plt.plot(loss_vec, 'k--')
    plt.title('L2 Loss per Generation')
    plt.xlabel('Generation')
    plt.ylabel('L2 Loss')
    plt.show()         

    展开全文
  • 线性回归算法 **一般都是准备数据,训练,可视化。 导入x数据和y数据。 ** 产生一个空的数组,把x_data里的数据语言,有多少个数据(取0行),列数增加1,保留数据值再加上dtype,np.float浮点数。 Y值,本来是...

    程序,先用年龄和身高写出来。尽可能让点在直线周围,称为拟合。第二种数据是鸢尾花,分类
    在这里插入图片描述

    还有很多数据,iris鸢尾花,boston房产数据。
    在这里插入图片描述
    公式始终是xw+b,最后可以看成x乘系数1,(w/b)b

    在这里插入图片描述
    线性回归的算法

    在这里插入图片描述
    **一般都是准备数据,训练,可视化。
    导入x数据和y数据。
    **
    在这里插入图片描述
    产生一个空的数组,把x_data里的数据语言,有多少个数据(取0行),列数增加1,保留数据值再加上dtype,np.float浮点数。
    Y值,本来是一行,变成多行一列,原来是横过来的数组,变成列的数组,计算就会方便,把y其中的0,变成1列,

    在这里插入图片描述
    **这里都属于数据加载.x数据放进去,把所有的行放进去,所有第一列的数据就等于x_data。
    把第二列,所有的行,但是列数是第二列
    **

    在这里插入图片描述
    第二列全是1

    在这里插入图片描述
    后面是2x2的矩阵模式
    在这里插入图片描述
    把数据准备好就开始训练
    在这里插入图片描述
    先求转置矩阵
    在这里插入图片描述
    、这种方式就可以把矩阵求出来

    在这里插入图片描述
    转置矩阵求和以后要求逆矩阵
    在这里插入图片描述
    专门一个求逆矩阵的公式inv
    在这里插入图片描述
    再乘上x的转置矩阵
    在这里插入图片描述
    在这里插入图片描述
    再乘上y矩阵
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    得出的矩阵就是鼎鼎大名的W
    在这里插入图片描述
    这个W其实是个方程式,w.shape打印一个形状,是一个2乘1 的,一个特征就一个,结局就一个
    在这里插入图片描述
    在这里插入图片描述
    进行可视化
    在这里插入图片描述

    在这里插入图片描述
    这个拟合就需要用,W,x,y算出来,要用到理想的Y值,Y_IDEA等于x乘上w,np.matmul(X,W),ax.plot画成直线
    在这里插入图片描述
    蓝色

    在这里插入图片描述
    在这里插入图片描述
    计算这个W,算法是没有问题的

    在这里插入图片描述
    scipy实现的方法就比较简单,这个可逆矩阵比numpy的效率稍微高点
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    查看有没有这个包

    在这里插入图片描述
    现在这是得出的结果

    在这里插入图片描述
    线性回归具备分类的作用,sklearn线性模型,下面是线性回归对象
    在这里插入图片描述
    这个对象,对数据是有要求的,需要格式化一下,要把形状一定要映射成-1
    在这里插入图片描述
    下面开始训练,拟合fit,进行拟合运算。把x放进去,期望的分值放进去Y_RG
    在这里插入图片描述
    打印出三个值,评估(得分率),斜率:coef,截距inyercept
    在这里插入图片描述
    在这里插入图片描述
    实际上sklearn 的拟合线性回归也是这套算法

    在这里插入图片描述
    下面开始计算鸢尾花数据
    在这里插入图片描述

    在这里插入图片描述
    先取前面x100个,y也是100个,用矩阵的方式批量运算比一个个算快得多
    在这里插入图片描述
    打印预测值,这里改成4位数据
    在这里插入图片描述
    在这里插入图片描述
    -1就是无限,打印Y数据看看

    在这里插入图片描述
    真实的Y,前50个0,后50个1

    在这里插入图片描述
    通过线性聚合,前50个靠近0,后面靠近1,线性回归也具备分类的作用
    在这里插入图片描述
    把分类的值统计出来,这里的可信度,达到百分之96
    在这里插入图片描述
    4个斜率,一个斜率一个特征,这个斜率决定了,哪个特征起主要效果
    在这里插入图片描述
    后面这个特征起主要效果

    在这里插入图片描述
    上面这个2的特征

    在这里插入图片描述
    可分性是最强的
    在这里插入图片描述
    后面这两个是分类的主要依据

    在这里插入图片描述
    这样就起主要因素

    在这里插入图片描述
    再写,把准确度分析一下,前面样本如果小于0,就分为A类
    在这里插入图片描述
    这里就得到一个矩阵
    在这里插入图片描述
    在这里插入图片描述
    这样就把A类的识别率,是高达92%的识别率
    在这里插入图片描述
    换成后面50个,如果大于0.9,属于B类
    在这里插入图片描述

    在这里插入图片描述
    这样识别率高达100,分类的时候,第三第四特征起主要特征

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    23类的可线性,明显低于A类

    在这里插入图片描述
    tennsorflow如何实现,线性回归最主要的问题是对于非线性的数据不是特别好,不是每个特征都有作用
    在这里插入图片描述
    有时会出现过拟合的现象
    在这里插入图片描述

    在这里插入图片描述
    现在这里连续的方式也具有分类的功能,算法依然是拟合,我们分类的时候就是0和1,算法其实也是在0和1徘徊
    在这里插入图片描述
    分类和拟合里,并不是特征越多越好,真正让拟合产生分类的效果的,哪几个特征让它趋于0或者就是0,可以把这种特征稀疏,尽量我们看到的特征拟合是1,或者靠近1

    每一个算法具有使用场景
    在这里插入图片描述
    在这里插入图片描述
    机器学习,深度学习基本就是拷贝这个算法,梯度下降,最小二乘法,后面就是搭框架

    现在线性里还有漏洞,就是三个假设(线性的,独立分布,正态的

    展开全文
  • 回归问题 在回归问题中,我们具体要预测的是一个具体的数值,而不是分类。...但是在分类问题里,假如样本有两维特征,如鸢尾花花瓣的大小与叶子的宽度,我们只需要二维空间中就能将它们分类,只需把用不同颜色...

    回归问题

    在回归问题中,我们具体要预测的是一个具体的数值,而不是分类。

    对于回归问题,比如,我们可以根据房屋的大小预测房屋的价格,在这里只有一个样本特征,就是房屋的大小,为了实现这个,我们需要在两维空间中表示。如横轴代表房屋大小,纵轴就是房屋的价格,也就是我们要预测的数值。但是在分类问题里,假如样本有两维特征,如鸢尾花花瓣的大小与叶子的宽度,我们只需要二维空间中就能将它们分类,只需把用不同颜色的点来标记不同的类别的样本。而回归问题中,如果我们有二维特征,那么就需要在三维的空间里进行回归。

    Simple Linear Regression就是指只有一个特征,能在二维平面上显示的回归问题。

    线性回归算法的基本思路

    定义一个损失函数,时这个损失函数的值尽可能小。
    损失函数代表损失的那一部分,而效用函数代表真正有用的那一部分。

    下面是一类机器学习算法的基本思路,近乎所有参数学习算法都是这种套路(e.g. 线性回归、多项式回归、逻辑回归、SVM、神经网络etc.)

    l
    最小化上面的损失函数就是典型的最小二乘法问题:最小化误差的平方

    最小二乘法

    要使损失函数最小,最直观的一个方法就是对函数的各个未知分量分别求导并使导数等于0。
    这里写图片描述
    过程略。

    实现Simple Linear Regression

    导入库和原始数据

    这里写图片描述

    根据最小二乘法得到的a和b的计算方法,来计算a和b

    这里写图片描述

    写出回归方程并预测新的数据样本相应的值

    这里写图片描述

    如果将Simple Linear Regression进行向量化,计算会更快一些,特别是方便a的计算方式,因为for循环运算效率比较低。

    向量化

    由于向量点乘就是向量各项分别相乘再相加。在numpy中使用向量运算比使用for循环要快很多倍。
    只需把上面for循环的部分改成:
    这里写图片描述
    需要注意的是,使用.dot方法必须保证进行运算的是向量,而之前上面定义的x_i不是向量,具体使用的时候要注意一下。

    衡量线性回归法的指标:MSE,RMSE和MAE

    均方误差MSE

    使得衡量标准与测试样本无关。这里写图片描述
    还有一个问题是量纲,有时候量纲可能会带来麻烦。采用均方根误差(RMSE)能解决这个问题。
    这里写图片描述这里写图片描述
    还有一种评测标准是平均绝对误差MAE。

    之前在最小二乘法中我们没有使用绝对值是因为绝对值不能保证函数处处可导。因此我们在评价一个算法时的标准和我们在最初优化目标函数可以是不一致的。

    实例:波士顿房产数据

    导入数据集,打印数据文档

    这里写图片描述

    选取属性RM,并绘制关于这个属性的原始数据

    这里写图片描述

    处理可能干扰结果的数据

    这里写图片描述

    使用简单线性回归法

    切分成训练集和测试集
    这里写图片描述
    用Linear Regression去fit数据,得到参数a,b的值,形成一个线性回归模型, 打印回归直线,预测测试集x_test中每个样本相对应的y
    这里写图片描述

    用MSE, RMSE, MAE计算误差来评测模型好坏

    MSE, RMSE, MAE内部代码实现
    这里写图片描述
    scikit-learn中的MSE和MAE
    这里写图片描述
    可见scikit-learn和我们实现的代码结果是一样的。

    展开全文
  • import tensorflow as tf import numpy as np import matplotlib.pyplot as plt from sklearn import datasets ...#加载鸢尾花集 iris=datasets.load_iris() #宽度 长度 x_vals=np.array([x[3] for ...
    import tensorflow as tf
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import  datasets
    sess=tf.Session()
    #加载鸢尾花集
    iris=datasets.load_iris()
    #宽度 长度
    x_vals=np.array([x[3] for x in iris.data])
    y_vals=np.array([x[0] for x in iris.data])
    
    learning_rate=0.05
    batch_size=25
    
    x_data=tf.placeholder(shape=[None,1],dtype=tf.float32)
    y_data=tf.placeholder(shape=[None,1],dtype=tf.float32)
    
    A=tf.Variable(tf.random_normal(shape=[1,1]))
    b=tf.Variable(tf.random_normal(shape=[1,1]))
    
    #增加线性模型y=Ax+b  x*a==>shape(None,1)+b==>shape(NOne,1)
    model_out=tf.add(tf.matmul(x_data,A),b)
    #声明L2损失函数
    loss=tf.reduce_mean(tf.square(y_data-model_out))
    
    #初始化变量
    init=tf.global_variables_initializer()
    sess.run(init)
    
    #梯度下降
    my_opt=tf.train.GradientDescentOptimizer(learning_rate)
    train_step=my_opt.minimize(loss)
    
    #循环迭代
    loss_rec=[]
    for i in range(100):
        rand_index=np.random.choice(len(x_vals),size=batch_size)
        #shape(None,1)
        rand_x=np.transpose([ x_vals[rand_index] ])
        rand_y=np.transpose([ y_vals[rand_index] ])
    
        #运行
        sess.run(train_step,feed_dict={x_data:rand_x,y_data:rand_y})
        temp_loss =sess.run(loss,feed_dict={x_data:rand_x,y_data:rand_y})
    
        #添加记录
        loss_rec.append(temp_loss)
        #打印
        if (i+1)%25==0:
            print('Step: %d A=%s b=%s'%(i,str(sess.run(A)),str(sess.run(b))))
            print('Loss:%s'% str(temp_loss))
    #抽取系数
    [slope]=sess.run(A)
    print(slope)
    [intercept]=sess.run(b)
    best_fit=[]
    for i in x_vals:
        best_fit.append(slope*i+intercept)
    #x_vals shape(None,1)
    plt.plot(x_vals,y_vals,'o',label='Data')
    plt.plot(x_vals,best_fit,'r-',label='Best fit line',linewidth=3)
    plt.legend(loc='upper left')
    
    plt.xlabel('Pedal Width')
    plt.ylabel('Pedal Length')
    plt.show()
    #L2
    plt.plot(loss_rec,'k-',label='Loss')
    plt.title('L2 loss per Generation')
    plt.xlabel('Generation')
    plt.ylabel('L2 loss ')
    plt.show()

     

    转载于:https://www.cnblogs.com/x0216u/p/9170695.html

    展开全文
  • 使用Logistic回归模型对鸢尾花数据集进行线性多分类、可视化显示和测试精度。 LogisticRegression 逻辑回归(logistic regression)是统计学习中的经典分类方法,属于对数线性模型,所以也被称为对数几率回归。...
  • 在进行可视化及聚类分析前,我们需要为IDLE安装sklearn库,scikit-learn是Python的一个开源机器学习模块,它建立在NumPy,SciPy和matplotlib模块之上能够为用户提供各种机器学习算法接口,可以让用户简单、高效地...
  • 鸢尾花数据集为机器学习常用的数据集,今天,我们基于该数据集进行算法学习 鸢尾花数据集 鸢尾花数据集有3个类别,每个类别有50个样本,其中一个类别与另外两个线性可分,另外两个线性不可分 特征: sepal_length...
  • 鸢尾花数据集有三个类别,每个类别有50个样本。其中一个类别与另外两个线性可分,另外两个不能线性可分。 PCA主成分分析 1.基本原理 在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换...
  • 鸢尾花数据集有三个类别,每个类别有50个样本。其中一个类别与另外两个线性可分,另外两个不能线性可分。 PCA主成分分析 1.基本原理 在统计学中,主成分分析PCA是一种简化数据集的技术。它是一个线性变换。这个变换...
  • 机器学习鸢尾花.zip

    2020-06-10 13:24:49
    期末作业关于鸢尾花不同算法模型评测 有线性回归,逻辑回归 ,KNN算法 上传保存一下。0积分分享,积分变动可留言
  • 但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法 #2018-03-28 16:57:56 March Wednesday the 13 week, the 087 day...线性回归模型通常是处理因变量是连续...
  • 支持向量机是一个功能强大并且全面的机器学习模型,它可以执行线性或者非线性分类,回归甚至异常检测任务。其主要分为三类:线性SVM分类、软间隔分类、非线性SVM分类。 本篇博客将重点深入SVM算法。简单了解下SVM...
  • 【机器学习】算法原理详细推导与实现(二):逻辑回归在上一篇算法中,线性回归实际上是 连续型 的结果,即 ,而逻辑回归的 是离散型,只能取两个值 ,这可以用来处理一些分类的问题。logistic函数我们可能会遇到一些...
  • 回顾一下线性回归,一般都是用商业数据集,进程数据预测,分析系统,核心是算法为主。 深度学习,主要是图像处理,文本处理,比如云字典 最小二乘法的数学推导过程,我们只要知道结果是可靠的就行 numpy的...
  • 线性回归除了做预测还可以做分类,比如鸢尾花数据 这个算法是用了sklearn 定义一个线性回归的对象,然后把数据放进去开始训练,得到斜率和结局 这是预测 所以线性回归还可以做分类 现在采用统一分布(uniform)...
  • 前面我们简单学习了线性回归、逻辑回归,不知道有没有做一个总结,那就是什么时候该用逻辑回归?从结果来观察,可以看到,线性回归的过程就是在找那个合适的方程,来尽量满足你的每行数据。即Y=ax + bx^2 + ……....
  • 写在前面分类是管理学、金融学、统计学等常用的实证分析方法之一,目前,分类的方法有逻辑回归、支持向量机、贝叶斯分类、决策树、支持向量机、卷积神经网络、线性判别分类器等等。方法有很多,不同的方法适用于不同...
  • 1.逻辑回归是分类算法,在线性回归的基础上,施加logistic函数,由理论上取值实数空间,转变成(0,1),针对小于0.5,我们 归为0类,大于0.5归为1类,临界值时可任意归类,变成二分类算法。 2.逻辑回归基于二...
  • 在上一篇算法中,线性回归实际上是 连续型 的结果,即 y∈Ry\in Ry∈R ,而逻辑回归的 yyy 是离散型,只能取两个值 y∈{0,1}y\in \{0,1\}y∈{0,1},这可以用来处理一些分类的问题。 logistic函数 我们可能会遇到一些...
  • 但是很多时候数据是非线性的,所以这篇文章主要讲述逻辑回归及Sklearn机器学习包中的LogisticRegression算法#2018-03-28 16...逻辑回归LogisticRegression分析鸢尾花数据线性回归模型通常是处理因变量是连续变量的问...
  • 文章目录逻辑回归原理简介线性回归与逻辑回归的区别逻辑回归原理推导构造预测函数构造损失函数梯度下降法求的最小值Demo实践Step1:库函数导入Step2:模型训练Step3:模型参数查看Step4:数据和模型可视化Step5:模型预测...
  • 前文我们介绍了简单有效的感知器,用它实现了一个线性分类器,并在鸢尾花数据集上取得不错的效果。您肯定懂得AI领域做分类任务的基本原理了。 如果您觉得迷迷糊糊也很正常,因为我们没有讲感知器的更新规则算法-梯度...
  • 在本系列前面的文章中,简单介绍了一下Ignite的线性回归算法,下面会尝试另一个机器学习算法,即k-最近邻(k-NN)分类。该算法基于对象k个最近邻中最常见的类来对对象进行分类,可用于确定类成员的关系。一个适合k-NN...
  • 机器学习实战之路 —— 2 Logistic回归1.Logistic回归1.1 从线性回归到...前面线性回归章节已经对回归基础算法作了介绍,回归算法主要用于对连续性数据的拟合,使得拟合的线尽量靠近所有的数据点,对于模型优化程度的评
  • 运用scikit-learn库对鸢尾花数据进行分类一、线性分类(一)感知器算法(二)Logistic回归(三)SVM(支持向量机)(四)决策树(五)随机森林二、非线性分类(一)核SVM(二)K近邻算法 鸢尾花数据是进行机器学习常用...
  • 在本系列前面的文章中,简单介绍了一下Ignite的线性回归算法,下面会尝试另一个机器学习算法,即k-最近邻(k-NN)分类。该算法基于对象k个最近邻中最常见的类来对对象进行分类,可用于确定类成员的关系。 一个适合k-...

空空如也

空空如也

1 2 3
收藏数 57
精华内容 22
关键字:

鸢尾花线性回归算法