李航老师的《统计学习方法》第二章算法的matlab程序

参考了http://blog.sina.com.cn/s/blog_bceeae150102v11v.html#post

% 感知机学习算法的原始形式,算法2.1参考李航《统计学习方法》书中第二章的算法P29

close all
clear all
clc
X=[3,3;4,3;1,1];Y=[1,1,-1];%训练数据集及标记
learnRate=1;%学习率
Omega=zeros(1,size(X,2))
b=0 %% ω和b的初值
i=1;k=0;
while 1
if Y(i)*(sum(Omega.*X(i,:))+b)<=0 %该点未被正确分类,调整之
Omega=Omega+learnRate*Y(i)*X(i,:);
b=b+learnRate*Y(i);
i=1;%调整w,b之后,重新对每个点检查
k=k+1;%记录迭代次数
fprintf(‘迭代次数k=%d‘,k);
omega=sprintf(‘%2.0f\t‘,Omega)
fprintf(‘b=%d\n‘,b);
continue;
else
i=i+1;
end
if i>size(X,1)
break;
end
end
w=Omega
b

% 感知机学习算法的对偶形式,算法2.2参考李航《统计学习方法》书中第二章的算法P33

close all
clear all
clc
X=[3,3;4,3;1,1];Y=[1,1,-1];%训练数据集及标记
learnRate=1;%学习率(0,1]
alpha=zeros(1,size(X,1))
b=0 %%alpha和b的初值 size(X,dim) dim=1返回行数(有几个x点),dim=2返回列数
G=X*X‘;%%计算Gram矩阵
i=1;k=0;
while 1
if Y(i)*(sum(alpha.*Y.*G(i,:))+b)<=0 %该点未被正确分类,调整之
alpha(i)=alpha(i)+1;
b=b+Y(i);
i=1;%调整w,b之后,重新对每个点检查
k=k+1;%记录迭代次数
fprintf(‘迭代次数k=%d‘,k);
Alpha=sprintf(‘%2.0f\t‘,alpha)
fprintf(‘b=%d\n‘,b);
continue;%跳过循环体中的某些语句。当在循环体内执行到该语句的时候,程序将跳过循环体内中剩下的所有语句,继续执行下一次循环。
else
i=i+1;
end
if i>size(X,1)
break;%终止循环的执行,当在循环体内执行到break语句的时候,程序将跳出该循环体,继续执行循环体外的下一个语句
end
end
w=alpha.*Y*X % *是乘法,即矩阵乘法,.*是点乘,即对应元素相乘
b

时间: 2024-10-24 12:48:21

李航老师的《统计学习方法》第二章算法的matlab程序的相关文章

第二章 算法入门 合并排序

在第二章中难的算法不多,接下来我会把稍微复杂一点的算法整理一下 #include <iostream> using namespace std; void mergeSort(int *A,int left,int mid,int right) { int *L=new int[mid-left+1]; int *R=new int[right-mid+1]; int i,j; for(i=0;i<mid-left+1;i++) { L[i]=A[left+i]; } for (j=0;

第二章 算法基础 思考题2-1

package chap02; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Random; import org.junit.Test; /*** * 在归并排序中对小数组采用插入排序 * * @author xiaojintao * */ public class ques2_1 { /** * 归并排序算法 * * @param a * @return */ static void m

算法导论(Introduction to Algorithms )— 第二章 算法入门 — 2.1 插入排序

一.插入排序:INSERTION-SORT 1.适用范围: which is an efficient algorithm for sorting a small number of elements. 对于少量元素的排序,插入排序是一种高效的算法. 2.原理: Insertion sort works the way many people sort a hand of playing cards. We start with an empty left hand and the cards

第二章 算法基础 思考题2-4(逆序对)

1 package chap02; 2 3 import static org.junit.Assert.*; 4 5 import java.util.Arrays; 6 7 import org.junit.Test; 8 9 public class ques2_4 { 10 /** 11 * 逆序对,将一个序列中的所有逆序对打印输出 12 * 13 * @author xiaojintao 14 * 15 */ 16 static void printReverseOrder(int[]

Prism 文档 第二章 初始化Prism应用程序

                                                                       第二章 初始化Prism应用程序 本章将讨论为了使一个Prism应用程序的启动和运行哪些是必须的.Prism的应用程序在启动过程中需要注册和配置,这被称为引导应用程序. 什么是Bootstrapper? bootstrapper是一个类,通过Prism类库负责一个应用程序建立的初始化.通过使用bootstrapper,对于如何将Prism库组件连接到您的应

FCM算法的matlab程序(初步)

FCM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648430.html文章中已经介绍了FCM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.

GMM算法的matlab程序(初步)

GMM算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648508.html文章中已经介绍了GMM算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0.2 5.4 3.

K-means算法的matlab程序(初步)

K-means算法的matlab程序 在https://www.cnblogs.com/kailugaji/p/9648369.html 文章中已经介绍了K-means算法,现在用matlab程序实现它. 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.txt 5.1 3.5 1.4 0.2 4.9 3 1.4 0.2 4.7 3.2 1.3 0.2 4.6 3.1 1.5 0.2 5 3.6 1.4 0

FCM算法的matlab程序2

FCM算法的matlab程序2 在"FCM算法的matlab程序"这篇文章中已经用matlab程序对iris数据库进行实现,并求解准确度.下面的程序是另一种方法,是最常用的方法:先初始化聚类中心,在进行迭代(此方法由于循环较多,时间复杂度相对较高,但更严谨.就时间性而言,推荐使用"FCM算法的matlab程序"这个程序). 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.采用iris数据库 iris_data.tx