精华内容
下载资源
问答
  • 此 simulink 文件用于解决 Astrom 使用增益调度技术在自适应控制参考中提出的非线性变换问题
  • 前一篇文章讲解了图像灰度化处理及线性变换知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,本篇文章主要讲解非线性变换,使用自定义方法对图像进行灰度化处理,包括对数变换和伽马变换。本文主要讲解灰度...

    该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。希望文章对您有所帮助,如果有不足之处,还请海涵~

    该系列在github所有源代码:https://github.com/eastmountyxz/ImageProcessing-Python
    PS:请求帮忙点个Star,哈哈,第一次使用Github,以后会分享更多代码,一起加油。

    同时推荐作者的C++图像系列知识:
    [数字图像处理] 一.MFC详解显示BMP格式图片
    [数字图像处理] 二.MFC单文档分割窗口显示图片
    [数字图像处理] 三.MFC实现图像灰度、采样和量化功能详解
    [数字图像处理] 四.MFC对话框绘制灰度直方图
    [数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
    [数字图像处理] 六.MFC空间几何变换之图像平移、镜像、旋转、缩放详解
    [数字图像处理] 七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

    前文参考:
    [Python图像处理] 一.图像处理基础知识及OpenCV入门函数
    [Python图像处理] 二.OpenCV+Numpy库读取与修改像素
    [Python图像处理] 三.获取图像属性、兴趣ROI区域及通道处理
    [Python图像处理] 四.图像平滑之均值滤波、方框滤波、高斯滤波及中值滤波
    [Python图像处理] 五.图像融合、加法运算及图像类型转换
    [Python图像处理] 六.图像缩放、图像旋转、图像翻转与图像平移
    [Python图像处理] 七.图像阈值化处理及算法对比
    [Python图像处理] 八.图像腐蚀与图像膨胀
    [Python图像处理] 九.形态学之图像开运算、闭运算、梯度运算
    [Python图像处理] 十.形态学之图像顶帽运算和黑帽运算
    [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图
    [Python图像处理] 十二.图像几何变换之图像仿射变换、图像透视变换和图像校正
    [Python图像处理] 十三.基于灰度三维图的图像顶帽运算和黑帽运算
    [Python图像处理] 十四.基于OpenCV和像素处理的图像灰度化处理
    [Python图像处理] 十五.图像的灰度线性变换

    前一篇文章讲解了图像灰度化处理及线性变换知识,结合OpenCV调用cv2.cvtColor()函数实现图像灰度操作,本篇文章主要讲解非线性变换,使用自定义方法对图像进行灰度化处理,包括对数变换和伽马变换。本文主要讲解灰度线性变换,基础性知识希望对您有所帮助。
    1.图像灰度非线性变换:DB=DA×DA/255
    2.图像灰度对数变换
    3.图像灰度伽玛变换

    PS:文章参考自己以前系列图像处理文章及OpenCV库函数,同时参考如下文献:
    杨秀璋等. 基于苗族服饰的图像锐化和边缘提取技术研究[J]. 现代计算机,2018(10).
    《数字图像处理》(第3版),冈萨雷斯著,阮秋琦译,电子工业出版社,2013年.
    《数字图像处理学》(第3版),阮秋琦,电子工业出版社,2008年,北京.
    《OpenCV3编程入门》,毛星云,冷雪飞,电子工业出版社,2015.
    [数字图像处理] 五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理详解
    python+opencv+图像特效(图像灰度处理、颜色翻转、图片融合,边缘检测,浮雕效果)
    数字图像处理-空间域处理-灰度变换-基本灰度变换函数
    OpenCV图像增强算法实现(直方图均衡化、拉普拉斯、Log、Gamma)


    一.图像灰度非线性变换:DB=DA×DA/255

    图像的灰度非线性变换主要包括对数变换、幂次变换、指数变换、分段函数变换,通过非线性关系对图像进行灰度处理,下面主要讲解三种常见类型的灰度非线性变换。

    原始图像的灰度值按照DB=DA×DA/255的公式进行非线性变换,其代码如下:

    # -*- coding: utf-8 -*-
    import cv2  
    import numpy as np  
    import matplotlib.pyplot as plt
    
    #读取原始图像
    img = cv2.imread('miao.png')
    
    #图像灰度转换
    grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    #获取图像高度和宽度
    height = grayImage.shape[0]
    width = grayImage.shape[1]
    
    #创建一幅图像
    result = np.zeros((height, width), np.uint8)
    
    #图像灰度非线性变换:DB=DA×DA/255
    for i in range(height):
        for j in range(width):
            gray = int(grayImage[i,j])*int(grayImage[i,j]) / 255
            result[i,j] = np.uint8(gray)
    
    #显示图像
    cv2.imshow("Gray Image", grayImage)
    cv2.imshow("Result", result)
    
    #等待显示
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    图像灰度非线性变换的输出结果下图所示:


    二.图像灰度对数变换

    图像灰度的对数变换一般表示如公式所示:

    其中c为尺度比较常数,DA为原始图像灰度值,DB为变换后的目标灰度值。如下图所示,它表示对数曲线下的灰度值变化情况。

    由于对数曲线在像素值较低的区域斜率大,在像素值较高的区域斜率较小,所以图像经过对数变换后,较暗区域的对比度将有所提升。这种变换可用于增强图像的暗部细节,从而用来扩展被压缩的高值图像中的较暗像素。

    对数变换实现了扩展低灰度值而压缩高灰度值的效果,被广泛地应用于频谱图像的显示中。一个典型的应用是傅立叶频谱,其动态范围可能宽达0~106直接显示频谱时,图像显示设备的动态范围往往不能满足要求,从而丢失大量的暗部细节;而在使用对数变换之后,图像的动态范围被合理地非线性压缩,从而可以清晰地显示。在下图中,未经变换的频谱经过对数变换后,增加了低灰度区域的对比度,从而增强暗部的细节。

    下面的代码实现了图像灰度的对数变换。

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    #绘制曲线
    def log_plot(c):
        x = np.arange(0, 256, 0.01)
        y = c * np.log(1 + x)
        plt.plot(x, y, 'r', linewidth=1)
        plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
        plt.title(u'对数变换函数')
        plt.xlim(0, 255), plt.ylim(0, 255)
        plt.show()
    
    #对数变换
    def log(c, img):
        output = c * np.log(1.0 + img)
        output = np.uint8(output + 0.5)
        return output
    
    #读取原始图像
    img = cv2.imread('test.png')
    
    #绘制对数变换曲线
    log_plot(42)
    
    #图像灰度对数变换
    output = log(42, img)
    
    #显示图像
    cv2.imshow('Input', img)
    cv2.imshow('Output', output)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    下图表示经过对数函数处理后的效果图,对数变换对于整体对比度偏低并且灰度值偏低的图像增强效果较好。

    对应的对数函数曲线如图


    三.图像灰度伽玛变换

    伽玛变换又称为指数变换或幂次变换,是另一种常用的灰度非线性变换。图像灰度的伽玛变换一般表示如公式所示:

    • 当γ>1时,会拉伸图像中灰度级较高的区域,压缩灰度级较低的部分。
    • 当γ<1时,会拉伸图像中灰度级较低的区域,压缩灰度级较高的部分。
    • 当γ=1时,该灰度变换是线性的,此时通过线性方式改变原图像。

    Python实现图像灰度的伽玛变换代码如下,主要调用幂函数实现。

    # -*- coding: utf-8 -*-
    import numpy as np
    import matplotlib.pyplot as plt
    import cv2
    
    #绘制曲线
    def gamma_plot(c, v):
        x = np.arange(0, 256, 0.01)
        y = c*x**v
        plt.plot(x, y, 'r', linewidth=1)
        plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
        plt.title(u'伽马变换函数')
        plt.xlim([0, 255]), plt.ylim([0, 255])
        plt.show()
    
    #伽玛变换
    def gamma(img, c, v):
        lut = np.zeros(256, dtype=np.float32)
        for i in range(256):
            lut[i] = c * i ** v
        output_img = cv2.LUT(img, lut) #像素灰度值的映射
        output_img = np.uint8(output_img+0.5)  
        return output_img
    
    #读取原始图像
    img = cv2.imread('test.png')
    
    #绘制伽玛变换曲线
    gamma_plot(0.00000005, 4.0)
    
    #图像灰度伽玛变换
    output = gamma(img, 0.00000005, 4.0)
    
    #显示图像
    cv2.imshow('Imput', img)
    cv2.imshow('Output', output)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    下图表示经过伽玛变换处理后的效果图,伽马变换对于图像对比度偏低,并且整体亮度值偏高(或由于相机过曝)情况下的图像增强效果明显。

    对应的幂律函数曲线如图所示。


    文章周日写于钟书阁,女神伴于旁。希望文章对大家有所帮助,如果有错误或不足之处,还请海涵。最近连续奔波考博,经历的事情太多,有喜有悲,需要改变自己好好对女神,也希望读者与我一起加油。

    (By:Eastmount 2019-03-31 深夜12点 https://blog.csdn.net/Eastmount/)


    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    展开全文
  • matlab开发-非线性变换增益调制。非线性变换增益调度
  • 图像线性与非线性变换

    千次阅读 2020-01-19 13:30:08
    2、对数、指数变换、取反等多种非线性变换的效果对比 变换结果与分析 分段线性变换 1)变换函数 2)分段线性变换结果 3)分段线性变换对比分析 通过变换,将灰度值小于82的变小,将灰度值大于173的增大,...

    变换目标

    1、分段线性变换各种情况的变换效果对比
    2、对数、指数变换、取反等多种非线性变换的效果对比

    变换结果与分析

    分段线性变换
    1)变换函数
    在这里插入图片描述
    2)分段线性变换结果
    在这里插入图片描述
    3)分段线性变换对比分析
    通过变换,将灰度值小于82的变小,将灰度值大于173的增大,处于82与173之间的被拉伸。
    对数变换
    1)变换函数

    在这里插入图片描述
    2)对数变换结果
    在这里插入图片描述
    3)对数变换分析
    低灰度值区域被拉伸,高灰度值区域被缩小,常数c越大,图像灰度值越集中于255,常数c越接近0,图像灰度值越接近于0.
    指数变换
    1)变换函数
    在这里插入图片描述
    2)指数变换结果
    在这里插入图片描述
    3)指数变换分析:
    当指数大于1,图像灰度值减小,当指数小于1大于0,回想灰度值增大。
    取反变换
    1)取反变换函数
    在这里插入图片描述
    2)取反变换结果
    在这里插入图片描述
    3)取反变换对比分析
    增强了图像暗色区域中的白色或灰色细节,特别是黑色面积在尺寸上占主导地位的时候,效果逐渐明显。

    代码

    分段线性变换

    %Write  by 长安 Rjex
    %分段线性变换各种情况的变换效果对比
    %name为图像文件名,(r1,s1),(r2,s2)为变换点
    function B = pielinear(name,r1,s1,r2,s2)I = imread(name); 
    if r1>r2||s1>s2
       error(message('MATLAB:pieLinear:invalidCoordinate'))
    end 
    A=rgb2gray(I);B = A; %确定分段函数方程
    syms k b;
    [k1,b1] =solve([k*r1+b==s1, 0*k+b==0], k,b);
    [k2,b2] =solve([k*r2+b==s2, k*r1+b==s1], [k,b]);
    [k3,b3] =solve([k*r2+b==s2, k*255+b==255], [k,b]); %符号变量转换成数值常量
    k1 = double(k1);
    k2 = double(k2);
    k3 = double(k3);
    b1 = double(b1);
    b2 = double(b2);b3 = double(b3); %分段线性变换
    for i = 1 : size(A,1)
        for j = 1 : size(A,2)    
            if A(i,j)<=r1       
                 B(i,j) = double(A(i,j))*k1+b1; %此处须将A浮点化,否则对A的算术运算范围为0~255        
            elseif 
                 A(i,j)>r1&&A(i,j)<=r2            
                 B(i,j) = double(A(i,j))*k2+b2;        
             else            
                 B(i,j) = double(A(i,j))*k3+b3;        
             end    
         end
    end %原图与对比度拉伸后的图像
    
    figure(1);
    subplot(2,2,1),imshow(A),title('(a)原始图像');
    subplot(2,2,2),imhist(A),title('(b)原始直方图');
    subplot(2,2,3),imshow(B),title('(c)分段线性变换后的图像');
    subplot(2,2,4),imhist(B),title('(d)分段线性变换后的直方图'); %分段函数的表示
    
    figure(2);
    x=0:1:255;y=(k1*x+b1).*(x>=0&x<=r1)+(k2*x+b2).*(x>r1&x<=r2)+(k3*x+b3).*(x>r2&x<=255);plot(x,y);axis([0 255 0 255]),title('分段函数'),xlabel('r'),ylabel('T(r)'); 

    反转(取反)变换

    %Write  by 长安 Rjex
    %图像反转的变换效果对比%name为图像文件名
    function B = negatrans(name)I = imread(name);
    A=rgb2gray(I);
    B = A; %图像反转
    for i = 1 : size(A,1)
        for j = 1 : size(A,2)      
              B(i,j) = 255-double(A(i,j));
               %此处须将A浮点化,否则对A的算术运算范围为0~255    
        end
    end %原图与图像反转后的图像
    
    figure(1);
    subplot(2,2,1),imshow(A),title('(a)原始图像');
    subplot(2,2,2),imhist(A),title('(b)原始直方图');
    subplot(2,2,3),imshow(B),title('(c)反转后的图像');
    subplot(2,2,4),imhist(B),title('(d)反转后的直方图'); %反转函数的表示
    
    figure(2);
    x=0:1:255;y=255-x;plot(x,y),axis([0 255 0 255]),title('反转函数'),xlabel('r'),ylabel('T(r)'); 

    对数变换

    %Write  by 长安 Rjex
    %对数变换各种情况的变换效果对比%name为图像文件名,c为对数变换中的常数,即:clog(r+1)
    function B = logtrans(name,c)I = imread(name); 
    A=rgb2gray(I);B = A; %对数变换
    for i = 1 : size(A,1)
        for j = 1 : size(A,2)       
             B(i,j) = c*log(double(A(i,j))+1); %此处须将A浮点化,否则对A的算术运算范围为0~255    
        end
    end %原图与对数变换后的图像
    
    figure(1);
    subplot(2,2,1),imshow(A),title('(a)原始图像');
    subplot(2,2,2),imhist(A),title('(b)原始直方图');
    subplot(2,2,3),imshow(B),title('(c)对数变换后的图像');
    subplot(2,2,4),imhist(B),title('(d)对数变换后的直方图'); %对数函数的表示
    
    figure(2);
    x=0:1:255;y=c*log(x+1);plot(x,y);axis([0 255 0 255]),title('对数函数'),xlabel('r'),ylabel('T(r)'); 

    指数变换

    %Write  by 长安 Rjex
    %指数变换各种情况的变换效果对比%name为图像文件名
    function B = indextrans(name,c,r)
    I = imread(name); 
    A=rgb2gray(I);B = A; %指数变换
    for i = 1 : size(A,1)
        for j = 1 : size(A,2)       
             B(i,j) = (double(A(i,j))^r.*c)/(255^r)*255; %此处须将A浮点化,否则对A的算术运算范围为0~255    
        end
    end %原图与指数变换后的图像
    
    figure(1);
    subplot(2,2,1),imshow(A),title('(a)原始图像');
    subplot(2,2,2),imhist(A),title('(b)原始直方图');
    subplot(2,2,3),imshow(B),title('(c)指数变换后的图像');
    subplot(2,2,4),imhist(B),title('(d)指数变换后的直方图'); %指数函数的表示
    
    figure(2);
    x=0:1:255;y=(x.^r.*c)/(255^r)*255;plot(x,y);axis([0 255 0 255]),title('指数函数'),xlabel('r'),ylabel('T(r)');
    展开全文
  • 非线性变换 matlab

    2014-06-10 20:12:02
    自己改良的非线性变换图像增强方法的matlab程序,用在了我的毕业设计里面实测可用,请赐分。
  • 非线性变换的改错.zip

    2020-05-22 21:23:39
    本程序经过自己验证、改错。可以运行。适合初学者进行学习观摩。非线性变换的初学者可以下载学习。方便,快捷
  • MATLAB非线性变换

    千次阅读 2019-04-04 00:40:43
    非线性变换 对图像进行灰度变换 clear all; R=imread('peppers.png'); G=rgb2gray(R); J=double(G); H=(log(J+1)/10); subplot(121);imshow(G); title('灰度图像'); subplot(122);imshow(H); title('非线性变换图像'...
    非线性变换
    对图像进行灰度变换
    clear all;
    R=imread('peppers.png');
    G=rgb2gray(R);
    J=double(G);
    H=(log(J+1)/10);
    subplot(121);imshow(G);
    title('灰度图像');
    subplot(122);imshow(H);
    title('非线性变换图像');
    
    利用imadjust函数调整图像的灰度与亮度
    clear all;
    I=imread('pout.tif');
    subplot(221);imshow(I);
    title('原始图像');
    J=imadjust(I);
    subplot(222);imshow(J);
    title('原始图像灰度调整');
    K=imadjust(I,[0.3,0.7],[]);
    subplot(223);imshow(K);
    title('图像变亮');
    G=imadjust(I,[0.3,0.7],[0,1],4);
    subplot(224);imshow(G);
    title('图像变暗');
    
    利用imhist函数计算和显示灰度图像的直方图
    clear all;
    I=imread('pout.tif');
    subplot(121);imshow(I);
    title('原始图像');
    subplot(122);imhist(I);
    title('灰度直方图');
    
    利用histeq函数对弧度图像进行直方图均衡化
    clear all;
    I=imread('tire.tif');
    J=histeq(I);
    subplot(221);imshow(I);
    title('原始图像');
    subplot(222);imshow(J);
    title('图像均衡化');
    subplot(223);imhist(I,64);
    title('原图像的直方图');
    subplot(224);imhist(J,64);
    title('图像均衡化的直方图');
    
    通过histeq对图像进行规定化处理
    clear all;
    I=imread('tire.tif');
    hgram=ones(1,256);
    J=histeq(I,hgram);
    subplot(121);imshow(uint8(I));
    title('原始图像');
    subplot(122);imhist(J);
    
    imadd函数实现两幅图像的叠加
    clear all;
    I=imread('rice.png');
    J=imread('cameraman.tif');
    K=imadd(I,J,'uint16');
    subplot(131);imshow(I);
    title('原始图像 rice');
    subplot(132);imshow(J);
    title('原始图像 cameraman');
    subplot(133);imshow(K,[]);
    title('两幅图像叠加');
    
    利用imnoise函数为图像添加椒盐噪声
    clear all;
    I=imread('eight.tif');
    J=imnoise(I,'salt & pepper',0.04);
    subplot(121);imshow(I);
    title('原始图像');
    subplot(122);imshow(J);
    title('添加椒盐噪声的图像');
    
    利用imadd方法进行噪声抑制
    clear all;
    I=imread('eight.tif');
    J1=imnoise(I,'gaussian',0,0.006);
    J2=imnoise(I,'gaussian',0,0.006);
    J3=imnoise(I,'gaussian',0,0.006);
    J4=imnoise(I,'gaussian',0,0.006);
    K=imlincomb(0.3,J1,0.3,J2,0.3,J3,0.3,J4);
    figure;
    subplot(131);imshow(I);
    title('原始图像');
    subplot(132);imshow(J1);
    title('添加高斯噪声的图像');
    subplot(133);imshow(K,[]);
    title('抑制高斯噪声的图像');
    
    利用imsubtract函数取出图像的背景
    clear all;
    I=imread('rice.png');
    background=imopen(I,strel('disk',15));
    Ip=imsubtract(I,background);
    figure;
    subplot(131);imshow(I);
    title('原始图像');
    subplot(132);imshow(background);
    title('背景图');
    subplot(133);imshow(Ip,[]);
    title('去除背景的图像');
    
    利用imabsdiff进行图像减法运算,两幅图像差的绝对值
    clear all;
    I=imread('cameraman.tif');
    J=uint8(filter2(fspecial('gaussian'),I));
    K=imabsdiff(I,J);
    subplot(131),imshow(I);
    title('原始图像');
    subplot(132);imshow(J);
    title('含噪图像');
    subplot(133);imshow(K,[]);
    title('两幅图像相减');
    
    对图像进行自乘和与一个常数相乘//flower图片可能不存在
    clear all;
    I=imread('flower.jpg');
    subplot(221);imshow(I);
    title('原始图像');
    I16=uint16(I);
    J=immultiply(I16,I16);
    subplot(222);imshow(J);
    title('图像自相乘效果');
    J2=immultiply(I,0.65);
    subplot(2,2,3);imshow(J2);
    title('图像与常数相乘');
    
    利用imdivide函数对图像进行除法运算
    clear all;
    I=imread('office_1.jpg');
    J=imread('office_2.jpg');
    Ip=imdivide(J,I);
    K=imdivide(J,0.45);
    subplot(221);imshow(I);
    title('office1 图像');
    subplot(222);imshow(J);
    title('office2 图像');
    subplot(223);imshow(Ip);
    title('两幅图像相除');
    subplot(224);imshow(K);
    title('图像与常数相除');
    
    展开全文
  • 线性回归中的非线性变换

    千次阅读 2018-12-05 23:00:01
    非线性变换 在线性回归模型中,会发现有些变量与预测变量不是线性关系,所以需要非线性变换,把非线性关系转换为线性关系。 一、单变量做变换 载入boston房价数据 from sklearn.datasets import load_boston from...

    非线性变换

    在线性回归模型中,会发现有些变量与预测变量不是线性关系,所以需要非线性变换,把非线性关系转换为线性关系。

    一、单变量做变换

    载入boston房价数据
    from sklearn.datasets import load_boston
    from random import shuffle
    boston = load_boston()
    #seed(0) # Creates a replicable shuffling
    #new_index = range(boston.data.shape[0])
    #shuffle(new_index) # shuffling the index
    #X, y = boston.data[new_index], boston.target[new_index]
    X, y = boston.data, boston.target
    print (X.shape, y.shape, boston.feature_names)


    #散点图判断变量与目标之间的关系
    import pandas as pd
    df = pd.DataFrame(X,columns=boston.feature_names)
    df['target'] = y
    scatter = df.plot(kind='scatter', x='LSTAT', y='target', c='r')

    从图中可以看出,LSTA可尝试log变换

    import numpy as np
    from sklearn.feature_selection.univariate_selection import f_regression
    a=df['LSTAT'].values
    y=boston.target
    a=a.reshape(-1,1)

    #注意:f_regression中的X参数和Y参数都必须是narray格式,且X必须是矩阵模式。
    '''print(type(a))
    print(type(y))
    print(np.shape(a))
    print(np.shape(y))
    print(a)
    print(y)'''
    F, pval = f_regression(a,y)
    #X_indices = np.arange(X.shape[-1])
    print('F score for the original feature %.1f' % F)
    F, pval = f_regression(np.log(a),y)
    print('F score for the transformed feature %.1f' % F)

    可以看出,log变换之后,F值变大,变换比较有效

    import matplotlib.pyplot as plt
    c=np.log(a)
    #plt.scatter(a,y,s=[30],c='b')
    plt.scatter(c,y,s=[30],c='b')

    如上图,关系呈现线性。

    二、除了考虑单变量,还要考虑变量之间的交互作用

    #加载助手类:线性回归模型,K折交叉验证
    from sklearn.linear_model import LinearRegression
    from sklearn.cross_validation import cross_val_score
    from sklearn.cross_validation import KFold
    regression = LinearRegression(normalize=True)
    crossvalidation = KFold(n=X.shape[0], n_folds=10, shuffle=True, random_state=1)

    #加载波士顿房价预测数据集
    from sklearn.datasets import load_boston
    from random import shuffle
    boston = load_boston()
    X, y = boston.data, boston.target
    df = pd.DataFrame(X,columns=boston.feature_names)
    baseline = np.mean(cross_val_score(regression, df, y, scoring='r2', cv=crossvalidation, n_jobs=1))
    #创建一个列表,该列表遍历所有的交互项(n*n次),如果加入了某个交互项的模型的k折交叉验证得分高于基准线,就会把交互项和得分存在列表中
    interactions = list()
    for feature_A in boston.feature_names:
        for feature_B in boston.feature_names:
            if feature_A > feature_B:
                df['interaction'] = df[feature_A] * df[feature_B]
                score = np.mean(cross_val_score(regression, df, y, scoring='r2', cv=crossvalidation, n_jobs=1))
                if score > baseline:
                    interactions.append((feature_A, feature_B, round(score,3)))
    print ('Baseline R2: %.3f' % baseline)
    print ('Top 10 interactions: %s' % sorted(interactions, key=lambda x:x[2], reverse=True)[:10])

     

    结果集如下:

    现在检测rm、lstat与房价的关系

    colors = ['b' if v > np.mean(y) else 'g' for v in y]
    scatter = df.plot(kind='scatter', x='RM', y='LSTAT', c=colors)

    rm代表每栋房子的房间数

    LSTAT代表该地区低社会地位人口占比,

    综上,房间数越多、地区人口社会越高,房价越高,符合常识。

    :Attribute Information (in order):
            - CRIM     per capita crime rate by town
            - ZN       proportion of residential land zoned for lots over 25,000 sq.ft.
            - INDUS    proportion of non-retail business acres per town
            - CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)
            - NOX      nitric oxides concentration (parts per 10 million)
            - RM       average number of rooms per dwelling
            - AGE      proportion of owner-occupied units built prior to 1940
            - DIS      weighted distances to five Boston employment centres
            - RAD      index of accessibility to radial highways
            - TAX      full-value property-tax rate per $10,000
            - PTRATIO  pupil-teacher ratio by town
            - B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town
            - LSTAT    % lower status of the population
            - MEDV     Median value of owner-occupied homes in $1000's

    三、多项式回归:添加二次项和相互变量

    # Adding polynomial features (x**2,y**2,xy)
    polyX = pd.DataFrame(X,columns=boston.feature_names)
    baseline = np.mean(cross_val_score(regression, polyX, y, scoring='neg_mean_squared_error', cv=crossvalidation, n_jobs=1))
    improvements = [baseline]
    for feature_A in boston.feature_names: 
        polyX[feature_A+'^2'] = polyX[feature_A]**2
        improvements.append(np.mean(cross_val_score(regression, polyX, y, scoring='neg_mean_squared_error', cv=crossvalidation, n_jobs=1)))
        for feature_B in boston.feature_names:
            if feature_A > feature_B:
                polyX[feature_A+'*'+feature_B] = polyX[feature_A] * polyX[feature_B]
                improvements.append(np.mean(cross_val_score(regression, polyX, y, scoring='neg_mean_squared_error', cv=crossvalidation, n_jobs=1)))
    #作图
    import matplotlib.pyplot as plt
    import numpy as np
    plt.figure() 
    plt.plot(range(0,92),np.abs(improvements),'-')
    plt.xlabel('Polynomial features')
    plt.ylabel('Mean squared error')
    plt.show()
    #验证均方差

    print(baseline)
    print (np.shape(polyX))
    crossvalidation = KFold(n=X.shape[0], n_folds=10, shuffle=True, random_state=1)
    print ('Mean squared error %.3f' % abs(np.mean(cross_val_score(regression, polyX, y, scoring='neg_mean_squared_error', cv=crossvalidation, n_jobs=1))))

    图中可以看出,多项式的特征越多不一定越好。

    检查最终的模型,发现polyX有104个特征,一般对于一个特征至少需要有10-20个观察点,最好在30个以上。

    此案例有506个观察点,特征点25左右比较合适。104个太多。从折线图看,20是个不错的点。

    如果想获得完美的模型,需要逐一去尝试变量。

     

     

     

     

     

     

     

     

    展开全文
  • 基于非线性变换函数的变动量CMA盲均衡
  • 基于非线性变换对的信道加密技术研究
  • 16灰度非线性变换

    2020-05-04 16:43:03
    # 主要包括对数变换、...# 原始图像的灰度值按照DB=DA×DA/255的公式进行非线性变换 import cv2 import numpy as np import matplotlib.pyplot as plt #读取原始图像 img = cv2.imread('C:/Users/31035/Desktop...
  • MATLAB的非线性变换

    千次阅读 2018-11-19 14:53:57
    下面来简单介绍一下基于MATLAB的非线性变换处理图像: 1、首先打开MATLAB的主界面,在其中的编辑器中写入如下代码: I=imread('G:\MATLAB练习\bm.bmp'); %读取保存路径下的图片 I1=rgb2gray(I); subplot(1,2,1...
  • 一、图像灰度化处理1、最大值灰度处理方法2、平均灰度处理方法3、加权平均灰度处理方法二、图像灰度线性变换1、图像灰度上移变换2、图像对比度增强变换3、图像对比度减弱变换4、图像灰度反色变换三、图像灰度非线性...
  • 基于matlab的二进小波和非线性变换的图像增强,直接运行非线性增强的程序NonlinearEnhancement即可,有很高的参考价值
  • 通过对Keccak杂凑函数的非线性环节进行研究, 提出了n元Keccak类非线性变换, 并逐比特分析了其变换规律, 通过分类研究, 给出了两个原象不相等时, 象不相等的充分条件和象相等的必要条件; 进一步证明了当n为奇数时, n...
  • 提出了一种高鉴别能力的实时光学相关器,它采用液晶光阀(LCLV)作为实时输入器件,并利用其非线性变换特性对图像微分预处理;全息记录材料采用光折变晶体,且使用会聚球面波作参考光。所给出的实验结果表明,该光学...
  • 提出了一种采用非线性变换的MPSK/MQAM类信号符号速率盲估计方法,充分利用了MPSK/MQAM数字信号相邻符号的相位变化信息,通过对零中频信号进行非线性处理,构造一个非线性变换的复数函数,生成含有符号速率的离散谱线。...
  • 图像的线性、非线性变换 逐像素运算 逐像素运算就是对图像中的每个像素点的亮度值,通过一定的函数关系转换到新的亮度值。这个转换可以由函数关系表示s=f(r)s=f(r)s=f(r)其中,r 表示原来的像素值,s 表示新的像素...
  • DataScience:深入探讨与分析机器学习中的数据处理之非线性变换—log对数变换、sigmoid/softmax变换 目录 深入探讨与分析机器学习中的数据处理之非线性变换 log对数变换 sigmoid/softmax变换 Sigmoid函数...
  • 图像灰度的非线性变换平方变换对数变换 平方变换 将灰度进行平方再除以255,用于 降级图像亮度 增强亮部对比度 减缓暗部对比度 对比度可以看作灰度的斜率 对数变换
  • 给出了一种基于Sigmoid变换的自适应时间延迟估计算法(SATDE),采用 Sigmoid函数,对含有脉冲性噪声的信号进行非线性变换;利用自适应滤波器对信号的时间延迟参量进行估计。计算机数值仿真实验结果表明,该算法在对信号的...
  • 本文介绍了非线性变换的整体流程:通过非线性变换,将非线性模型映射到另一个空间,转换为线性模型,再来进行线性分类。之后介绍了非线性变换存在的问题:时间复杂度和空间复杂度的增加。尽可能使用简单的模型,而...
  • Android数字图像处理之非线性变换

    千次阅读 2018-10-06 17:29:45
    前面讲过的“非0即1法”,固定阈值法,双固定阈值法等都属于非线性变换。这里再补充几种常用的非线性变换。 一、灰度对数变换  对数变换实现了图像的灰度扩展和压缩的功能。它扩展低灰度值而压缩高灰度值,让图像...
  • layout title subtitle date author header-img catalog tags ... 脑电分析之线性与非线性变换 EEG technology 2020-03-12 陈锐CR img/post-bg-desk.jpg true EEG ...
  • 文章针对帧内编码块提出了基于深度学习的非线性变换方法,可以达到1.79%的BD-rate增益。 在帧内编码过程中,信号间的线性依赖可以通过线性预测和线性变换来消除。但是由于预测往往不够完美,导致一些依赖信息不能...
  • 非线性变换.m

    2015-05-11 07:05:38
    %非线性变换 MATLAB 程序实现如下: I=imread('e:\role0\003i.bmp'); I1=rgb2gray(I); subplot(1,2,1),imshow(I1); title(' 灰度图像'); grid on; %显示网格线 axis on; %显示坐标系 J=double(I1); J
  • 基于非线性变换的用于助听器的可重构声波分解滤波器组(IEEE早期访问论文)
  • 基于二极管限幅功能的非线性变换电路,将三角输入波变为正弦波
  • 给出了一种利用非线性变换(本征映射)求解本征值问题的方法。作为应用的例子,利用这种方法处理了量子力学中的本征值问题。基本思想是:通过引入可调小参数和建立矩阵元方程,把用矩阵表示的算符对角化。根据所处理的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,832
精华内容 1,932
关键字:

非线性变换