Andrew Ng机器学习week7(Support Vector Machines)编程习题

2024-05-04 13:18

本文主要是介绍Andrew Ng机器学习week7(Support Vector Machines)编程习题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Andrew Ng机器学习week7(Support Vector Machines)编程习题

gaussianKernel.m

function sim = gaussianKernel(x1, x2, sigma)
%RBFKERNEL returns a radial basis function kernel between x1 and x2
%   sim = gaussianKernel(x1, x2) returns a gaussian kernel between x1 and x2
%   and returns the value in sim% Ensure that x1 and x2 are column vectors
x1 = x1(:); x2 = x2(:);% You need to return the following variables correctly.
sim = 0;% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return the similarity between x1
%               and x2 computed using a Gaussian kernel with bandwidth
%               sigma
%
%sim = exp(-(sum((x1 - x2).^2)) / (2 * sigma ^ 2));% =============================================================end

dataset3Params.m

function [C, sigma] = dataset3Params(X, y, Xval, yval)
%DATASET3PARAMS returns your choice of C and sigma for Part 3 of the exercise
%where you select the optimal (C, sigma) learning parameters to use for SVM
%with RBF kernel
%   [C, sigma] = DATASET3PARAMS(X, y, Xval, yval) returns your choice of C and 
%   sigma. You should complete this function to return the optimal C and 
%   sigma based on a cross-validation set.
%% You need to return the following variables correctly.
C = 1;
sigma = 0.3;% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return the optimal C and sigma
%               learning parameters found using the cross validation set.
%               You can use svmPredict to predict the labels on the cross
%               validation set. For example, 
%                   predictions = svmPredict(model, Xval);
%               will return the predictions on the cross validation set.
%
%  Note: You can compute the prediction error using 
%        mean(double(predictions ~= yval))
%
steps = [ 0.01 0.03 0.1 0.3 1 3 10 30 ];
minError = Inf;
minC = Inf;
minSigma = Inf;% i*j means every condition of different C and Sigma.
for i = 1:length(steps)for j = 1:length(steps)currentC = steps(i);currentSigma = steps(j);model = svmTrain(X, y, currentC, @(x1, x2) gaussianKernel(x1, x2, currentSigma));predictions = svmPredict(model, Xval);error = mean(double(predictions ~= yval));if(error < minError)minError = error;minC = currentC;minSigma = currentSigma;endend    
endC = minC;
sigma = minSigma;% =========================================================================end

processEmail.m

function word_indices = processEmail(email_contents)
%PROCESSEMAIL preprocesses a the body of an email and
%returns a list of word_indices 
%   word_indices = PROCESSEMAIL(email_contents) preprocesses 
%   the body of an email and returns a list of indices of the 
%   words contained in the email. 
%% Load Vocabulary
vocabList = getVocabList();% Init return value
word_indices = [];% ========================== Preprocess Email ===========================% Find the Headers ( \n\n and remove )
% Uncomment the following lines if you are working with raw emails with the
% full headers% hdrstart = strfind(email_contents, ([char(10) char(10)]));
% email_contents = email_contents(hdrstart(1):end);% Lower case
email_contents = lower(email_contents);% Strip all HTML
% Looks for any expression that starts with < and ends with > and replace
% and does not have any < or > in the tag it with a space
email_contents = regexprep(email_contents, '<[^<>]+>', ' ');% Handle Numbers
% Look for one or more characters between 0-9
email_contents = regexprep(email_contents, '[0-9]+', 'number');% Handle URLS
% Look for strings starting with http:// or https://
email_contents = regexprep(email_contents, ...'(http|https)://[^\s]*', 'httpaddr');% Handle Email Addresses
% Look for strings with @ in the middle
email_contents = regexprep(email_contents, '[^\s]+@[^\s]+', 'emailaddr');% Handle $ sign
email_contents = regexprep(email_contents, '[$]+', 'dollar');% ========================== Tokenize Email ===========================% Output the email to screen as well
fprintf('\n==== Processed Email ====\n\n');% Process file
l = 0;while ~isempty(email_contents)% Tokenize and also get rid of any punctuation[str, email_contents] = ...strtok(email_contents, ...[' @$/#.-:&*+=[]?!(){},''">_<;%' char(10) char(13)]);% Remove any non alphanumeric charactersstr = regexprep(str, '[^a-zA-Z0-9]', '');% Stem the word % (the porterStemmer sometimes has issues, so we use a try catch block)try str = porterStemmer(strtrim(str)); catch str = ''; continue;end;% Skip the word if it is too shortif length(str) < 1continue;end% Look up the word in the dictionary and add to word_indices if% found% ====================== YOUR CODE HERE ======================% Instructions: Fill in this function to add the index of str to%               word_indices if it is in the vocabulary. At this point%               of the code, you have a stemmed word from the email in%               the variable str. You should look up str in the%               vocabulary list (vocabList). If a match exists, you%               should add the index of the word to the word_indices%               vector. Concretely, if str = 'action', then you should%               look up the vocabulary list to find where in vocabList%               'action' appears. For example, if vocabList{18} =%               'action', then, you should add 18 to the word_indices %               vector (e.g., word_indices = [word_indices ; 18]; ).% % Note: vocabList{idx} returns a the word with index idx in the%       vocabulary list.% % Note: You can use strcmp(str1, str2) to compare two strings (str1 and%       str2). It will return 1 only if the two strings are equivalent.%for i = 1:length(vocabList)if(strcmp(vocabList(i), str))word_indices = [word_indices; i]break;end
end  % =============================================================% Print to screen, ensuring that the output lines are not too longif (l + length(str) + 1) > 78fprintf('\n');l = 0;endfprintf('%s ', str);l = l + length(str) + 1;end% Print footer
fprintf('\n\n=========================\n');end

emailFeatures.m

function x = emailFeatures(word_indices)
%EMAILFEATURES takes in a word_indices vector and produces a feature vector
%from the word indices
%   x = EMAILFEATURES(word_indices) takes in a word_indices vector and 
%   produces a feature vector from the word indices. % Total number of words in the dictionary
n = 1899;% You need to return the following variables correctly.
x = zeros(n, 1);% ====================== YOUR CODE HERE ======================
% Instructions: Fill in this function to return a feature vector for the
%               given email (word_indices). To help make it easier to 
%               process the emails, we have have already pre-processed each
%               email and converted each word in the email into an index in
%               a fixed dictionary (of 1899 words). The variable
%               word_indices contains the list of indices of the words
%               which occur in one email.
% 
%               Concretely, if an email has the text:
%
%                  The quick brown fox jumped over the lazy dog.
%
%               Then, the word_indices vector for this text might look 
%               like:
%               
%                   60  100   33   44   10     53  60  58   5
%
%               where, we have mapped each word onto a number, for example:
%
%                   the   -- 60
%                   quick -- 100
%                   ...
%
%              (note: the above numbers are just an example and are not the
%               actual mappings).
%
%              Your task is take one such word_indices vector and construct
%              a binary feature vector that indicates whether a particular
%              word occurs in the email. That is, x(i) = 1 when word i
%              is present in the email. Concretely, if the word 'the' (say,
%              index 60) appears in the email, then x(60) = 1. The feature
%              vector should look like:
%
%              x = [ 0 0 0 0 1 0 0 0 ... 0 0 0 0 1 ... 0 0 0 1 0 ..];
%
%for i = 1:length(word_indices)x(word_indices(i)) = 1;
end% =========================================================================end

这篇关于Andrew Ng机器学习week7(Support Vector Machines)编程习题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/959277

相关文章

Java并发编程之可见性volatile (十一)

一.介绍 synchronized是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级的同步机制。但它同时不容易被正确理解,也至于在并发编程中很多程序员遇到线程安全的问题就会使用synchronized。Java内存模型告诉我们,各个线程会将共享变量从主内存中拷贝到工作内存,然后执行引擎会基于工作内存中的数据进行操作处理。线程在工作内存进

Java并发编程之 lock (十)

一. 前言 synchronized 是Java的关键字,是Java的内置特性,在JVM层面实现了对临界资源的同步互斥访问,但 synchronized 粒度有些大,在处理实际问题时存在诸多局限性,比如响应中断等。Lock 提供了比 synchronized更广泛的锁操作,它能以更优雅的方式处理线程同步问题。 二.Lock相关接口 1.lock void lock(); lock()方

Pytorch学习笔记_4_训练一个分类器

关于数据 一般来说,对于图像、文本、音频或视频数据,可以使用标准的Python包来将这些数据加载为numpy array,之后可以将这些array转换为torch.*Tensor 对于图像,Pillow、OpenCV包音频,scipy、librosa包文本,可以使用原始Python和Cython加载,或NLKT和SpaCy 特别的,对于视觉任务,有一个包torchvision,其中包含了处理

Pytorch学习笔记_3_构建一个神经网络

Neural Networks 神经网络可以通过使用torch.nn包来创建 nn依赖于autograd来定义模型并求导。 一个nn.Module类包含各个层和一个forward(input)前向传播方法,该方法返回output 例如这个分类数字图像的网络: 这是个简单的前馈神经网络,它接受一个输入,然后一层接一层的传递,最后输出计算结果 一个神经网络的典型训练过程: 定义包

Pytorch学习笔记_2_Autograd自动求导机制

Autograd 自动求导机制 PyTorch 中所有神经网络的核心是 autograd 包。 autograd 包为张量上的所有操作提供了自动求导。它是一个在运行时定义的框架,可以通过代码的运行来决定反向传播的过程,并且每次迭代可以是不同的。 通过一些示例来了解 Tensor 张量 torch.tensor是这个包的核心类。 设置.requires_grad为True,会追踪所有对于

Pytorch学习笔记_1_tensor张量

Tensors Tensors与Numpy中的ndarrays类似 torch.new_* 与 torch.*_like 前者创建的对象会保持原有的属性(如dtype),但shape不同 >>> x = torch.zeros(5, 3, dtype=torch.double)>>> x.new_ones(2, 3)tensor([[1., 1., 1.],[1., 1., 1.]],

【应用机器学习】评估一个假设

检验是否过拟合 将数据分成训练集和测试集 通常用70%的数据作为训练集,用剩下30%的数据作为测试集。 很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行洗牌,然后再分成训练集和测试集。 使用训练集对模型进行训练 可以得到一系列参数 theta 使用测试集对模型进行测试 使用测试集数据对模型进行测试,有两种方式计算误差 线性回归模型 利用测试集数据计算代

html 复制标签内文本的按钮的 js 实现【学习过程】【浏览器兼容】

想要实现div中的文字内容一键复制到剪切板中,一开始在网上search到两种方案: 方案1: <script type="text/javascript"> function jsCopy(s){ var obj=document.getElementById(s);obj.select(); //选择对象 document.execCommand("Copy"); //执行浏览器复制命令al

【Cloud Foundry】Cloud Foundry学习(四)——Service

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801         Services:Cloud Foundry的Service模块从源代码控制上看就知道是一个独立的、可Plugin的模块,以方便第三方把自己的服务整合入 CloudFoundry生态系统。在Github上看到service是与CloudFoundry C

【Ruby】Ruby的model学习——Active Record Associations

在阅读的过程中有任何问题,欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801     一、如何定义关联     两个model之间常常会存在关联关系,为了解决这些关联引起的复杂操作问题,可以在model定义时定义其关联关系。如:实体customers和orders定义如下: class Customer < ActiveR