精华内容
下载资源
问答
  • R语言:如何做回归分析

    千次阅读 2020-02-20 11:02:15
    在实际的数据处理过程中,我们经常需要一些回归分析,其中有线性回归、逻辑回归、多项式回归等等,我们这里主要是结合R语言进行简单的线性回归分析。 首先,我们需要弄清楚因变量和自变量,一般自变量为x,因变量...

    在实际的数据处理过程中,我们经常需要做一些回归分析,其中有线性回归、逻辑回归、多项式回归等等,我们这里主要是结合R语言进行简单的线性回归分析。

    1. 首先,我们需要弄清楚因变量和自变量,一般自变量为x,因变量为y,也就是我们常常应用数学公式看到的。
    2. 然后,是建立回归模型,这里我们主要采用一元线性回归,在R语言中主要用到lm(x~y+1)。
    3. 其次,通过summary()函数分析残差、系数、标准差、置信区间等。
    4. 再次,通过predict()函数对未知数据进行预测。
    5. 最后,把目标点和拟合曲线绘制在一起。

    以下是一个完整的项目。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    参考文献
    1.项目源代码
    2.回归分析
    3.R语言做一元线性回归分析

    展开全文
  • 用excel多元回归分析, 希望你的excel是专业版或者企业版的, 而且装全了.
  • 今天我们将学习逻辑回归(logistics regression),由于逻辑回归是基于线性回归的特殊变化,故还没有掌握线性回归的小伙伴,可以先点击这里,传送门:如何用线性回归做数据分析?...

    今天我们将学习逻辑回归(logistics regression),由于逻辑回归是基于线性回归的特殊变化,故还没有掌握线性回归的小伙伴,可以先点击这里,传送门:如何用线性回归做数据分析?接下来,我将用最简单通俗的语言来为大家介绍逻辑回归模型及其应用。

    逻辑回归是解决二分类问题的监督学习算法,用来估计某个类别的概率。其直接预测值是表示0-1区间概率的数据,基于概率再划定阈值进行分类,而求解概率的过程就是回归的过程。

     

    逻辑回归应用于数据分析的场景主要有三种:

    • 驱动力分析:某个事件发生与否受多个因素所影响,分析不同因素对事件发生驱动力的强弱(驱动力指相关性,不是因果性);

    • 预测:预测事件发生的概率;

    • 分类:适合做多种分类算法、因果分析等的基础组件;

    01

        

    逻辑回归的原理

    下图是之前讲到的线性回归模型的数据分布,线性回归是用一条线来拟合自变量和因变量之间的关系,我们可以看到其输出结果y是连续的。例如我们想预测不同用户特征对所使用产品的满意分,可以采用线性回归模型。但是如果我们想根据这些因素去判断用户的性别,或者是否推荐使用等,之前的线性回归就不适用了,这时,我们就要用到逻辑回归进行二分类了。但是分类模型输出结果却需要是离散的,如何把连续型的y转化为取值范围0-1的数值呢?

     

    答案是,我们只需要将线性回归模型的结果带入到sigmoid函数(sigmoid函数就是Logistic函数,故本算法名为逻辑回归),即可将线性回归模型转化为二分类问题,这就是逻辑回归。我们可以这样理解:逻辑回归=线性回归+sigmoid函数

     

    那么,什么是sigmoid函数呢?如图,当输入值趋于无穷小时,函数值趋近于0;输入值趋于无穷大时,函数值趋近于1。我们将线性回归结果y带入到sigmoid函数的x,即下图横坐标,就轻而易举的将连续变量y转换为了0-1区间的一个概率值。当这个概率值(函数值)小于0.5时,我们将最终结果预测为0,当概率值大于0.5时,我们将预测结果预测为1。

     

    以上就是逻辑回归的基本原理,简述一下逻辑回归的算法步骤,可以概括为四步:

    • 将自变量特征输入

    • 定义自变量的线性组合y,即针对自变量线性回归

    • 将线性回归结果y映射到sigmoid函数,生成一个0-1范围取值的函数概率值

    • 根据概率值,定义阈值(通常为0.5),判定分类结果的正负

     

        

    02

        

    逻辑回归的目标函数

    在明确了逻辑回归的原理后,我们来看它的目标函数可以用什么来表示?在之前的线性回归模型中,我们用误差平方和来做其目标函数,意思就是每个数据点预测值与实际值误差的平方和。在此,我们将单一数据点的误差定义为cost函数,即可获得目标函数的通用形式:

    我希望每一个我预测出的数据点结果使得它的误差所带来的代价越小越好,然后求和所得到的目标函数也是越小越好。在具体模型训练的时候,我们在假设可以调整模型的一些参数,通过这些参数我们求得每一点的预测值,最终我们调整模型参数使得目标函数可以取到它能取得的最小值。

     

    但是逻辑回归不可用最小误差平方和作为其目标函数,原因主要是逻辑回归的优化方法需要使用梯度下降法 ,而使用误差平方和会导致非凸(non-convex)的目标函数,非凸函数会存在多个局部极小值,而多个局部极小值不利于用梯度下降法找到全局的最小损失值。

     那么逻辑回归用什么来表示误差呢?如果y表示样本的真实标签,即0或者1,f(x)表示预测结果是0或者1的概率,f(x)的取值在区间[0,1]。

     

    逻辑回归的cost函数如下,我们如何理解这个公式呢?

    当真实标签为正时,即y= 1,Cost函数=-log⁡(f(x)), 预测值越接近于1,说明预测越准确,则损失函数趋于0。

    当真实标签为负时,即y= 0,Cost函数=-log⁡(1-f(x)),预测值越接近于0,说明预测越准确,则损失函数趋于0。

    将逻辑回归的cost函数简化,即得出:

    将逻辑回归cost函数带入目标函数通用形式,即可形成逻辑回归最终的目标函数:

        

    03

        

    逻辑回归python实现

     

    鸢尾花下有三个亚属,分别是山鸢尾 (setosa),变色鸢尾(versicolor)和维吉尼亚鸢尾(virginica),据此可将鸢尾属花分为以上三类。本案例根据花萼的长度和宽度,花瓣的长度和宽度,采用逻辑回归建立分类模型,对鸢尾属花进行分类。

     

    1、导入包及训练数据集

    2、观测多特征数据点分布

    通过观察特征分布,发现山鸢尾(蓝色)与其他两类花能够较好区分,但是变色鸢尾(绿色)和维吉尼亚鸢尾(红色)相对难以区分。

     

    3、数据清洗、划分训练集

    将分类变量赋于0/1/2数值,观测结果标签分布,发现各种类型鸢尾分布均匀。将特征变量和结果变量进行划分,并划分训练集与测试集。

    4、  训练分类模型、并进行分类性能评估

    5、构建混淆矩阵

    观察混淆矩阵,发现我们的分类器只在两个样本上预测失误。这两个样本真实类别是2(virginica,维吉尼亚鸢尾),而我们的分类器将其分类成1(versicolor,变色鸢尾)

    6、获取模型系数与截距(模型系数即为影响事件发生的驱动力)

     


    上逻辑回归就讲完了,逻辑回归是数据分析面试的高频考点,一定要熟练掌握喔~

    感谢大家的阅读,关注小洛的公众号,一起交流数据分析话题~ 

    展开全文
  •  特别在数据处理较为庞大的时候,采用保序回归做回归分析,可以极大地节省资源,从而提高计算效率。  保序回归的思想,是对数据进行均值排序,从数据集的第一个数开始,如果下一个数出现乱序,即与设定的顺序...

     

     

      不多说,直接上干货!

     

      相比于决策树,保序回归的应用范围没有决策树算法那么广泛。

      特别在数据处理较为庞大的时候,采用保序回归做回归分析,可以极大地节省资源,从而提高计算效率。

     

     

      保序回归的思想,是对数据进行均值排序,从数据集的第一个数开始,如果下一个数出现乱序,即与设定的顺序不符,则从乱序的数据开始逐个开始求得平均值,直到求得的平均值与下一个数据比较不成为乱序为止。

     

      例如一个数据集:

     {1,3,2,4,5}

     

      要求其按照保序回归由小到大进行排列。

      首先观察第一个数是1,可以不做变动继续存放。第二个是2,仍然不需要变动。第三个数是2,是属于乱序从而需要对其重新计算。

      第三个数是乱序,需要对其重新计算,提取数据2和下一个数据4,计算得到平均值为3,因此,可获得一个新的数据集:

     {1,3,3,3,5}

     

     

     

      具体,见

    Spark Mllib机器学习实战的第8章 决策树与保序回归

    转载于:https://www.cnblogs.com/zlslch/p/7486835.html

    展开全文
  • 在matlab中安装好libsvm包(过程请见 matlab 安装 libsvm 做回归分析)后,我们来用libsvm做一个回归。本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度、电力负荷数据,以及2009年的日期,24小时的...

    在matlab中安装好libsvm包(过程请见 matlab 安装 libsvm 做回归分析)后,我们来用libsvm做一个回归。

    本次实验的数据是来自老师给的2006-2008年的日期,24小时的温度、电力负荷数据,以及2009年的日期,24小时的温度数据,目的是预测2009年每天24小时的电力负荷,实验数据本文不予给出。

    用libsvm进行预测的步骤大体是:将数据进行归一化处理,并转换成livsvm需要的格式,然后进行参数择优,用选的最佳参数使用2006-2008 3年的数据建立模型,再用该模型预测2009年的电力负荷。实际过程中,我先用2006-2007年的数据建模,预测2008年的数据,以得到测试误差。事实证明,用2006-2007 两年的数据建模来预测2008年的电力负荷,效果要比单用2007年的数据建模预测2008年的电力负荷的效果好。所以最终我是用2006-2008 三年的数据进行建模,来预测。

    libsvm训练模型时,设置的参数有:
    -s SVM类型,取值有 0,1,2,3,4 回归的话选3或4.
    -t 核函数类型,取值有0,1,2,3 0是线性核函数,1是多项式核函数,2是RBF径向基核函数,3是sigmoid 核函数。
    -g gamma,这是针对多项式、RBF、sigmoid 核函数才有的参数选项。默认是1/k,k是属性数/类别数。
    -c 为 c-SVC、e-SVR 和 nu-SVR 设置的损失函数,默认为1.

    详细的参数描述见 LIBSVM使用方法及参数设置(转)

    下面是进行回归预测的步骤:

    1.将数据转换成libsvm需要的格式

    数据格式需要:

    target属性 第1个属性:值 第2个属性:值
    2 1:7 2:5
    1 1:4 2:2

    即如果是分类问题的话,第一列是类别属性。

    在网上下载一个 write4libsvm.m 格式转换程序,在matlab中直接运行,然后选择需要转换的数据文件即可,非常简便易用。

    write4libsvm.m

    function write4libsvm 
    % 为了使得数据满足libsvm的格式要求而进行的数据格式转换 注意原始格式是mat的数据格式,转化成txt或者dat都可以。
    % 原始数据保存格式为: 
    %             [标签 第一个属性值 第二个属性值...] 
    % 转换后文件格式为满足libsvm的格式要求,即: 
    %             [标签 1:第一个属性值 2:第二个属性值 3:第三个属性值 ...] 
    % Genial@ustc 
    % 2004.6.16 
    [filename, pathname] = uigetfile( {'*.mat', ... 
           '数据文件(*.mat)'; ... 
           '*.*',                   '所有文件 (*.*)'}, ... 
       '选择数据文件'); 
    try 
       S=load([pathname filename]); 
       fieldName = fieldnames(S); 
       str = cell2mat(fieldName); 
       B = getfield(S,str); 
       [m,n] = size(B); 
       [filename, pathname] = uiputfile({'*.txt;*.dat' ,'数据文件(*.txt;*.dat)';'*.*','所有文件 (*.*)'},'保存数据文件'); 
       fid = fopen([pathname filename],'w'); 
       if(fid~=-1) 
           for k=1:m 
               fprintf(fid,'%3d',B(k,1)); 
               for kk = 2:n 
                   fprintf(fid,'\t%d',(kk-1)); 
                   fprintf(fid,':'); 
                   fprintf(fid,'%d',B(k,kk)); 
               end 
               k 
               fprintf(fid,'\n'); 
           end 
           fclose(fid); 
       else 
           msgbox('无法保存文件!'); 
       end 
    catch 
    end 

    2. 选择核函数类型

    我选择的是RBF核函数。

    2.将数据做归一化处理

    不做归一化处理的话,最后预测误差会很大。
    通过程序对属性进行归一化处理。一开始我并没有做归一化处理,结果测试误差MAPE达14%,做属性归一化处理后,测试数据的MAPE是3.9556% 。

    clear;
    load('X1.mat');% X1.mat 是训练集。
    load('X2.mat');% X2.mat 是测试集。
    
    X1_1 =normalization(X1);
    X2_1 =normalization(X2);
    
    %另存为X1_1.mat X2_1.mat 然后运行 **write4libsvm.m** 转成符合需要的格式的文件 X1_1.csv 和 X2_1.csv。
    
    
    %进入D:\softwares_diy\MATLAB\R2014a\toolbox\libsvm-3.21目录,将D:\softwares_diy\MATLAB\R2014a\toolbox\libsvm-3.21\matlab添加到路径
    
    [Y1, X1] = libsvmread('X1_1.csv');% Y1 X1 是2006-2008年的数据。
    [Y2, X2] = libsvmread('X2_1.csv');%Y2 X2 是2009年的数据。
    
    Y1_train =  Y1(1:17520,:); %06-07年的数据做训练
    X1_train = X1(1:17520,:);
    Y1_test =  Y1(17521:end,:);%08年的数据做测试
    X1_test = X1(17521:end,:);

    3.参数寻优

    需调整的重要参数是 -c 和 -g。 -c指定损失函数,-g是针对多项式、RBF、sigmoid核函数的γ值设置。

    我用程序 SVM.cg.m 通过指定c的变化范围和g的变化范围来寻找最优的参数c和g。

    这是 预测代码

    %寻找最优的 c 和 g
    result1 = [];
    % 06-07年的数据训练,08年的数据做测试。
    %SVMcg(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
    %参数 c的变化范围是 [2^cmin,2^cmax]
    %参数g的变化范围是[2^gmin,2^gmax]
    %cstep是c的变化步长,gstep是g的变化步长。
    [bestacc,bestc,bestg] = SVMcg(Y1_train,X1_train,0,8,-1,4,2,1,1,0.9);
    %跑了很久才出来
    cmd = ['-s 3 -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
    model = libsvmtrain(Y1_train, X1_train, cmd);
    [y_08_pre,mse,decision_values] = libsvmpredict(Y1_test,X1_test,model);
    MAPE = mean(abs(y_test_pre-Y1_test)./Y1_test);%计08年的MAPE
    RMSE = sqrt(mean((y_test_pre-Y1_test).^2));
    MAE = mean(abs(y_test_pre-Y1_test));
    MSE = mean((y_test_pre-Y1_test).^2);     
    clear model cmd y_test_pre mse decision_values MAPE RMSE MAE MSE bestacc bestc bestg;
    
    %06-08年的数据做训练,09年测试。
    [bestacc,bestc,bestg] = SVMcg(Y1,X1,0,8,-1,4,2,1,1,0.9);
    cmd = ['-s 3 -t 2',' -c ',num2str(bestc),' -g ',num2str(bestg)];
    
    model = libsvmtrain(Y1, X1, cmd);
    [y_09_pre,mse,decision_values] = libsvmpredict(Y2,X2,model);

    其中 y_09_pre 是预测的 2009年每天24小时的电力负荷,由于并没有2009年电力负荷的真实值,所以忽略libsvmpredict的返回值mse。

    SVM.cg.m

    function [bestacc,bestc,bestg] = SVMcg(train_label,train,cmin,cmax,gmin,gmax,v,cstep,gstep,accstep)
    %SVMcg cross validation by faruto
    %Email:farutoliyang@gmail.com QQ:516667408 http://blog.sina.com.cn/faruto BNU
    %last modified 2009.8.23
    %Super Moderator @ www.ilovematlab.cn
    %% about the parameters of SVMcg 
    if nargin < 10
        accstep = 1.5;
    end
    if nargin < 8
        accstep = 1.5;
        cstep = 1;
        gstep = 1;
    end
    if nargin < 7
        accstep = 1.5;
        v = 3;
        cstep = 1;
        gstep = 1;
    end
    if nargin < 6
        accstep = 1.5;
        v = 3;
        cstep = 1;
        gstep = 1;
        gmax = 5;
    end
    if nargin < 5
        accstep = 1.5;
        v = 3;
        cstep = 1;
        gstep = 1;
        gmax = 5;
        gmin = -5;
    end
    if nargin < 4
        accstep = 1.5;
        v = 3;
        cstep = 1;
        gstep = 1;
        gmax = 5;
        gmin = -5;
        cmax = 5;
    end
    if nargin < 3
        accstep = 1.5;
        v = 3;
        cstep = 1;
        gstep = 1;
        gmax = 5;
        gmin = -5;
        cmax = 5;
        cmin = -5;
    end
    %% X:c Y:g cg:acc
    [X,Y] = meshgrid(cmin:cstep:cmax,gmin:gstep:gmax);
    [m,n] = size(X);
    cg = zeros(m,n);
    %% record acc with different c & g,and find the bestacc with the smallest c
    bestc = 0;
    bestg = 0;
    bestacc = 0;
    basenum = 2;
    for i = 1:m
        for j = 1:n
            cmd = ['-v ',num2str(v),' -c ',num2str( basenum^X(i,j) ),' -g ',num2str( basenum^Y(i,j) )];
            cg(i,j) = libsvmtrain(train_label, train, cmd);
    
            if cg(i,j) > bestacc
                bestacc = cg(i,j);
                bestc = basenum^X(i,j);
                bestg = basenum^Y(i,j);
            end
            if ( cg(i,j) == bestacc && bestc > basenum^X(i,j) )
                bestacc = cg(i,j);
                bestc = basenum^X(i,j);
                bestg = basenum^Y(i,j);
            end
    
        end
    end
    %% to draw the acc with different c & g
    [C,h] = contour(X,Y,cg,60:accstep:100);
    clabel(C,h,'FontSize',10,'Color','r');
    xlabel('log2c','FontSize',10);
    ylabel('log2g','FontSize',10);
    grid on;
    展开全文
  • getwd()———–逐步回归——————read.table("demo.csv",header=TRUE,sep=",")->demo demo scale.demo(demo[,c("a1","a2","a3","a4","a5","a6","y")],center = T,scale = T)#标准化数据 scale.demo cb
  • EXCEL做回归分析

    2012-06-11 10:20:00
    昨天,石头在食堂二楼,偶遇班上同学,她问我一问题,如何在spss中做回归分析,石头答曰:先做散点图,再选回归模型。 由于数学基础差,在SPSS中做出了散点图,却不识是何种模型,没办法,只好从excel中模拟,具体...
  • 如何用线性回归模型数据分析

    千次阅读 2020-11-26 08:40:00
    小洛写在前面:很多同学目前所的业务分析工作,徒手分析即可cover业务需求,较少用到一些高阶的统计模型和机器学习上面的东西。渐渐的便会产生一种感觉,即数据分析满足业务需求即可,不需要会...
  • 今天给大家写写如何把你的模型系数画出来,就是你的模型中自变量都有一个系数和置信区间嘛,那么我们把系数和其置信区间画出来的样子就像是meta中的森林图差不多,所以我把文章起了个绘制回归分析结果的森林图。...
  • 摘要: 本文以knn算法为例简要介绍如何使用分类算法来完成回归任务。 关键字: knn算法,回归任务...下面让我们看看如何使用分类算法来做回归分析。 1 构建回归分析的数据 为了仿真回归分析,我们也不得不自己构造能够
  • 今天来说说简单的线性回归,分别是用统计分析包statsmodels和机器学习包sklearn,数据来源是回归数据。 这个例子网上已经写烂了,大家可以自行搜索看看。 某公司在多个媒体渠道上发布了广告,业务人员想了解各媒体的...
  • 本博文源于《商务统计》,旨在讲述如何对线性回归分析中已经拟合好的直线残差分析。当谈起残差,必须了解残差是y的实际值和预测值之差。在线性回归分析残差检验中,牢记画两个图就行了,一种是残差图,一种是QQ...
  • 【译文】利用STAN贝叶斯回归分析:Part 1 正态回归作者 Lionel Hertzog本文将介绍如何在R中贝叶斯回归分析,你能在文末的参考文献中找到相关主题的更多信息。贝叶斯回归贝叶斯统计来自于贝叶斯公式,在回归分析...
  • 请教下高手,用matlab做回归分析时,如何提取出检验变量显著性的t统计量和p值啊?比如我现在的数据:X =9 81 729 11 121 133111 121 1331 15 225 337515 225 3...
  • 【译文】利用STAN贝叶斯回归分析:Part 2 非正态回归作者 Lionel Hertzogn前一篇文章已经介绍了如何在R中调用STAN对正态数据进行贝叶斯回归。本文则将利用三个例子来演示如何在R中利用STAN拟合非正态模型。三个...
  • SPSS篇—回归分析

    万次阅读 多人点赞 2019-08-20 09:29:06
    今天给大家分享一下如何用SPSS Statistics来进行回归分析,我们通过一个实例来具体了解一下整个分析的过程以及结果的解读。 上图中就是本次需要进行回归分析的数据,之前有跟大家说过,SPSS Statistics的界面跟...
  • 线性关系其实是最常见也是最有效,同时还是最好解释的,不过变量间复杂的关系我们用多项式回归做出来可能会更加的准确。刚好有位粉丝的数据需要用到多项式回归,今天就给大家写写。 要理解非线性关系,首先我们看看...
  • Tensorflow | 回归分析

    千次阅读 2017-02-02 16:59:00
    用tensorflow来做回归分析,基于梯度下降法 这里以一元回归分析为例子来说明如何用tensorflow实现回归分析。1、产生数据 采用随机的方式来产生。先基于均值为0,方差为0.9的正态分布产生随机数X,再通过线性变换...
  • R语言相关分析和稳健线性回归分析

    千次阅读 2019-12-16 14:35:51
    下面以物种多样性为例子展示了如何在R语言中进行相关分析和线性回归分析。 怎么测试 相关和线性回归示例 Data = read.table(textConnection(Input),header=TRUE) 数据简单图 ...

空空如也

空空如也

1 2 3 4 5 ... 17
收藏数 339
精华内容 135
关键字:

如何做回归分析