Kernel ridge regression(KRR)
作者:桂。
时间:2017-05-23 15:52:51
链接:http://www.cnblogs.com/xingshansi/p/6895710.html
一、理论描述
Kernel ridge regression (KRR)是对Ridge regression的扩展,看一下Ridge回归的准则函数:
求解
一些文章利用矩阵求逆,其实求逆只是表达方便,也可以直接计算。看一下KRR的理论推导,注意到
左乘,并右乘
,得到
利用Ridge回归中的最优解
对于xxT的形式可以利用kernel的思想:
可以看出只需要计算内积就可以,关于核函数的选择以及特性,参考另一篇文章。
先来验证一下理论的正确性,用MATLAB仿真一下:
clc;clear all;close all;
x = [-5:.1:5]';
y = 0.1*x.^3 + 0.3*x.^2 + randn(length(x),1);
subplot (2,2,1)
plot(x,y,'k');hold on;
title('原数据')
subplot (2,2,2)
w1 = inv(x'*x)*x'*y; %lsqr
plot(x,y,'k');hold on;
plot(x,w1*x,'r--');
title('最小二乘')
subplot (2,2,3)
w2 = inv(x'*x+0.5)*x'*y; %ridge lambda = 0.5
plot(x,y,'k');hold on;
plot(x,w2*x,'r--');
title('Ridge 回归')
subplot (2,2,4)
K = (1+x*x').^3;%kernel ridge regression ,lambda = 0.5
z = K*pinv(K + 0.5)*y;
plot(x,y,'k');hold on;
plot(x,z,'r--');
title('Kernel Ridge 回归')
结果图中可以看出,kernel 起到了效果:
二、Sklearn基本基本操作
基本用法(采用交叉验证):
kr = GridSearchCV(KernelRidge(kernel='rbf', gamma=0.1), cv=5,
param_grid={"alpha": [1e0, 0.1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5)})
kr.fit(X[:train_size], y[:train_size])
y_kr = kr.predict(X_plot)
应用实例:
from __future__ import division
import time import numpy as np
from sklearn.model_selection import GridSearchCV
from sklearn.kernel_ridge import KernelRidge
import matplotlib.pyplot as plt rng = np.random.RandomState(0) #############################################################################
# Generate sample data
X = 5 * rng.rand(10000, 1)
y = np.sin(X).ravel() # Add noise to targets
y[::5] += 3 * (0.5 - rng.rand(int(X.shape[0]/5))) X_plot = np.linspace(0, 5, 100000)[:, None] #############################################################################
# Fit regression model
train_size = 100 kr = GridSearchCV(KernelRidge(kernel='rbf', gamma=0.1), cv=5,
param_grid={"alpha": [1e0, 0.1, 1e-2, 1e-3],
"gamma": np.logspace(-2, 2, 5)}) t0 = time.time()
kr.fit(X[:train_size], y[:train_size])
kr_fit = time.time() - t0
print("KRR complexity and bandwidth selected and model fitted in %.3f s"
% kr_fit) t0 = time.time()
y_kr = kr.predict(X_plot)
kr_predict = time.time() - t0
print("KRR prediction for %d inputs in %.3f s"
% (X_plot.shape[0], kr_predict)) #############################################################################
# look at the results
plt.scatter(X[:100], y[:100], c='k', label='data', zorder=1)
plt.hold('on')
plt.plot(X_plot, y_kr, c='g',
label='KRR (fit: %.3fs, predict: %.3fs)' % (kr_fit, kr_predict))
plt.xlabel('data')
plt.ylabel('target')
plt.title('Kernel Ridge')
plt.legend()
参考
- http://scikit-learn.org/stable/modules/generated/sklearn.kernel_ridge.KernelRidge.html#sklearn.kernel_ridge.KernelRidge
Kernel ridge regression(KRR)的更多相关文章
- Probabilistic SVM 与 Kernel Logistic Regression(KLR)
本篇讲的是SVM与logistic regression的关系. (一) SVM算法概论 首先我们从头梳理一下SVM(一般情况下,SVM指的是soft-margin SVM)这个算法. 这个算法要实现 ...
- support vector regression与 kernel ridge regression
前一篇,我们将SVM与logistic regression联系起来,这一次我们将SVM与ridge regression(之前的linear regression)联系起来. (一)kernel r ...
- 机器学习方法:回归(三):最小角回归Least Angle Regression(LARS),forward stagewise selection
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 希望与志同道合的朋友一起交流,我刚刚设立了了一个技术交流QQ群:433250724,欢迎对算法.技术.应用感 ...
- 【转】Robust regression(稳健回归)
Robust regression(稳健回归) 语法 b=robustfit(X,y) b=robustfit(X,y,wfun,tune) b=robustfit(X,y,wfun,tune,con ...
- ufldl学习笔记与编程作业:Linear Regression(线性回归)
ufldl学习笔记与编程作业:Linear Regression(线性回归) ufldl出了新教程,感觉比之前的好.从基础讲起.系统清晰,又有编程实践. 在deep learning高质量群里面听一些 ...
- NNs(Neural Networks,神经网络)和Polynomial Regression(多项式回归)等价性之思考,以及深度模型可解释性原理研究与案例
1. Main Point 0x1:行文框架 第二章:我们会分别介绍NNs神经网络和PR多项式回归各自的定义和应用场景. 第三章:讨论NNs和PR在数学公式上的等价性,NNs和PR是两个等价的理论方法 ...
- Linux kernel启动选项(参数)(转)
Linux kernel启动选项(参数) 转载链接https://www.cnblogs.com/linuxbo/p/4286227.html 在Linux中,给kernel传递参数以控制其行为总共 ...
- Linear Regression(一)——
Linear Regression(一)-- 机器学习 回归 定义 回归的定义 在平面上存在这些点我希望能用一条直线尽可能经过它们. 于是我们画了下面的一条直线 这样的过程就叫做回归. 这个过程中我们 ...
- 机器学习技法笔记:Homework #6 AdaBoost&Kernel Ridge Regression相关习题
原文地址:http://www.jianshu.com/p/9bf9e2add795 AdaBoost 问题描述 程序实现 # coding:utf-8 import math import nump ...
随机推荐
- Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行
Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执行 Semaphore控制同时访问的线程个数countdownlatch等待多个线程执行完本身线程再执 ...
- 【实体 报错 】No serializer found for class org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer and no properties discovered to create BeanSerializer
HTTP Status 500 - Could not write content: No serializer found for class org.hibernate.proxy.pojo.ja ...
- Android 4.0 x86安装教程 附带联网参数详细设置
Android 4.0 x86是一个可以支持在电脑上运行的Android 4.0系统.没有手机一样也可以体验Android 4.0.这对玩机爱好者们来说也算得上是一个不大不小的好消息.不过目前的And ...
- OpenGl的源程序,运行就提示,"计算机丢失 glut32.dll文件"
转自:http://www.cppblog.com/longzxr/archive/2009/12/04/102565.html?opt=admin 今天调试OpenGl的源程序,编译通过,但一运行就 ...
- Virtualbox虚拟机安装CentOS 6.5图文详细教程
http://blog.csdn.net/risingsun001/article/details/37934975
- 深度学习Deep learning
In the last chapter we learned that deep neural networks are often much harder to train than shallow ...
- 神经网络可以拟合任意函数的视觉证明A visual proof that neural nets can compute any function
One of the most striking facts about neural networks is that they can compute any function at all. T ...
- /etc/skel 目录作用
/etc/skel包含的文件和目录会被自动复制到一个新用户的家目录(当使用 useradd 程序创建用户时)./etc/skel允许系统管理员给所有的新用户创建一个默认的家目录,这样所有的新用户都有一 ...
- Java多线程学习(吐血超具体总结)
林炳文Evankaka原创作品. 转载请注明出处http://blog.csdn.net/evankaka 写在前面的话:此文仅仅能说是java多线程的一个入门.事实上Java里头线程全然能够写一本书 ...
- linux 网络设备驱动
linux 网络驱动 谨以此文纪念过往的岁月 一.前言在linux中网络驱动也是一个大头,如何去理解网络驱动是作为一个linux驱动工程师必备的技能.不过同样的设备,在不同人的手中会有不同的效果,其原 ...