机器学习基石-作业三-代码部分

梯度下降迭代和牛顿迭代,gradient_and_newton.py

# -*- coding:utf-8 -*-
# Author: Evan Mi
import numpy as np"""
作业三中使用梯度下降和牛顿法进行迭代
"""def update(u, v, eta):u_tem = u - eta * (np.exp(u) + v * np.exp(u*v) + 2 * u - 2 * v - 3)v_tem = v - eta * (2 * np.exp(2*v) + u * np.exp(u * v) - 2 * u + 4 * v -2)return u_tem, v_temdef iter_update(u, v, times):uo = uvo = vfor i in range(times):uo, vo = update(uo, vo, 0.01)return np.exp(uo) + np.exp(2 * vo) + np.exp(uo * vo) + uo ** 2 - 2 * uo * vo + 2 * vo ** 2 - 3 * uo - 2 * vodef update_newton(u, v):gradient_tem = np.array([np.exp(u) + v * np.exp(u*v) + 2 * u - 2 * v - 3,2 * np.exp(2*v) + u * np.exp(u * v) - 2 * u + 4 * v - 2])laplace_tem = np.array([[np.exp(u) + (v ** 2) * np.exp(u * v) + 2, u * v * np.exp(u * v) + np.exp(u * v) - 2],[u * v * np.exp(u * v) + np.exp(u * v) - 2, 4 * np.exp(2 * v) + (u ** 2) * np.exp(u * v) + 4]])result = np.array([u, v]) - np.dot(np.linalg.pinv(laplace_tem), np.transpose(gradient_tem))return resultdef iter_update_newton(u, v, times):uo = uvo = vfor i in range(times):uo, vo = update_newton(uo, vo)return np.exp(uo) + np.exp(2 * vo) + np.exp(uo * vo) + uo ** 2 - 2 * uo * vo + 2 * vo ** 2 - 3 * uo - 2 * voprint(iter_update(0, 0, 5))
print(iter_update_newton(0, 0, 5))

 线性回归代码,

common.py

# -*- coding:utf-8 -*-
# Author: Evan Mi
import numpy as npdef data_generator(size):x_arr = np.concatenate((np.array([np.random.uniform(-1, 1, size)]).T, np.array([np.random.uniform(-1, 1, size)]).T),axis=1)y_arr = target_function(x_arr)tem = np.ones((size, 1))x_arr = np.concatenate((tem, x_arr), axis=1)y_arr = np.where(np.random.uniform(0, 1, size) < 0.1, -y_arr, y_arr)return x_arr, y_arrdef sign_zero_as_neg(x):"""这里修改了np自带的sign函数,当传入的值为0的时候,不再返回0,而是-1;也就是说在边界上的点按反例处理:param x::return:"""result = np.sign(x)result[result == 0] = -1return resultdef target_function(x):x_tem = (x * x).sum(axis=1) - 0.6result = sign_zero_as_neg(x_tem)return result

 linear_regression_al.py

# -*- coding:utf-8 -*-
# Author: Evan Mi
import numpy as np
from linear_regression import commondef e_in_counter(x_arr, y_arr):w_lin = np.dot(np.dot(np.linalg.pinv(np.dot(x_arr.T, x_arr)), x_arr.T), y_arr.T)y_in = common.sign_zero_as_neg(np.dot(x_arr, w_lin))errs = np.where(y_in == y_arr, 0, 1)return errs.sum()/errs.size, w_lindef e_out_counter(x_arr, y_arr, w_lin):y_in = common.sign_zero_as_neg(np.dot(x_arr, w_lin))errs = np.where(y_in == y_arr, 0, 1)return errs.sum() / errs.sizedef transform(x_arr):ones_tem = x_arr[:, 0]x1_tem = x_arr[:, 1]x2_tem = x_arr[:, 2]return np.concatenate((np.array([ones_tem]).T, np.array([x1_tem]).T, np.array([x2_tem]).T,np.array([x1_tem * x2_tem]).T, np.array([x1_tem ** 2]).T, np.array([x2_tem ** 2]).T), axis=1)if __name__ == '__main__':avg = 0w_avg = 0avg_transform = 0w_transform = 0for i in range(1000):xo, yo = common.data_generator(1000)e_in, w_in = e_in_counter(xo, yo)avg = avg + (1.0 / (i + 1)) * (e_in - avg)w_avg = w_avg + (1.0 / (i + 1)) * (w_in - w_avg)x_trans = transform(xo)e_tran, w_trans = e_in_counter(x_trans, yo)avg_transform = avg_transform + (1.0 / (i + 1)) * (e_tran - avg_transform)w_transform = w_transform + (1.0 / (i + 1)) * (w_trans - w_transform)print("avg:", avg, "w_avg:", w_avg)print("avg_trans:", avg_transform, "w_trans", w_transform)xo, yo = common.data_generator(1000)x_trans = transform(xo)e_out = e_out_counter(x_trans, yo, w_transform)print("e_out:", e_out)

对率回归代码logistic_regression_al.py

# -*- coding:utf-8 -*-
# Author: Evan Mi
import numpy as npdef load_data(file_name):x = []y = []with open(file_name, 'r+') as f:for line in f:line = line.rstrip("\n").strip(' ')temp = line.split(" ")temp.insert(0, '1')x_temp = [float(val) for val in temp[:-1]]y_tem = [int(val) for val in temp[-1:]][0]x.append(x_temp)y.append(y_tem)nx = np.array(x)ny = np.array(y)return nx, nydef gradient_decent_logistic_regression(x, y, eta, w, times):local_w = wfor i in range(times):tem_w = np.dot((1.0 / (1 + np.exp(-((-y) * np.dot(x, local_w))))), np.array([-y]).T * x) / np.size(y)local_w = local_w - eta * tem_wreturn local_wdef stochastic_gradient_decent_logistic_regression(x, y, eta, w, times):local_w = windex = 0for i in range(times):x_tem = x[index, :]y_tem = y[index]tem_w = (1.0 / (1 + np.exp(-((-y_tem) * np.dot(local_w, x_tem))))) * (-y_tem) * x_temlocal_w = local_w - eta * tem_windex = (index + 1) % np.size(y)return local_wdef e_out_counter(x, y, w):local_tem = 1.0 / (1 + np.exp(np.dot(x, w)))vec_result = np.where(local_tem > 0.5, 1, -1)result = np.where(vec_result == y, 1, 0)return sum(result)/np.size(result)if __name__ == '__main__':x_train, y_train = load_data('data/train.dat')x_val, y_val = load_data('data/test.dat')w_one = gradient_decent_logistic_regression(x_train, y_train, 0.001, np.zeros(np.size(x_train, 1)), 2000)e_out_one = e_out_counter(x_val, y_val, w_one)print("e_out_one:", e_out_one)w_two = gradient_decent_logistic_regression(x_train, y_train, 0.01, np.zeros(np.size(x_train, 1)), 2000)e_out_two = e_out_counter(x_val, y_val, w_two)print("e_out_two:", e_out_two)w_s = stochastic_gradient_decent_logistic_regression(x_train, y_train, 0.001, np.zeros(np.size(x_train, 1)), 2000)e_out_s = e_out_counter(x_val, y_val, w_s)print("e_out_s:", e_out_s)

详细项目代码及代码使用的数据见:梯度下降与牛顿迭代、线性回归、对率回归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569155.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设备树中#address-cells和#size-cells作用

device tree source Example1 / {#address-cells <0x1>; // 在 root node 下使用 1 個 u32 來代表 address。#size-cells <0x0>; // 在 root node 下使用 0 個 u32 來代表 size。......memory { // memory device... reg <0x90000000>; /…

[线段树][树上差分] Jzoj P3397 雨天的尾巴

Description 深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天&#xff0c;后来一场大雨和随之而来的洪水&#xff0c;浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力&#xff0c;但也倒了几座老房子&#xff0c;几棵老树被连根拔起&#xff0c;以及田地里的粮食…

02(c)多元无约束优化问题-牛顿法

此部分内容接《02(a)多元无约束优化问题》&#xff01; 第二类&#xff1a;牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}\mathbf{\delta })\text{ }\approx \text{ }f({{\mathbf{x}}_{k}}){{\nabla }^{T}}f({{\mathbf{x}}_{k}})\cdot \mathbf{\delta }\frac{1}{2}{{\mathbf{\…

推荐系统浅浅的例子

对于推荐系统&#xff0c;有很多的很强大的算法。这里作为练习&#xff0c;只介绍基本的协同过滤算法&#xff08;userbased&#xff09;和FM&#xff08;通过梯度下降的角度&#xff0c;还可以通过交替优化的角度来看&#xff09;。 这里的例子是在七月算法的视频中看的&#…

TPL Dataflow .Net 数据流组件,了解一下?

回顾上文 作为单体程序&#xff0c;依赖的第三方服务虽不多&#xff0c;但是2C的程序还是有不少内容可讲&#xff1b; 作为一个常规互联网系统&#xff0c;无外乎就是接受请求、处理请求&#xff0c;输出响应。 由于业务渐渐增长&#xff0c;数据处理的过程会越来越复杂和冗长&…

推荐系统实例

协同过滤与隐语义模型 在机器学习问题中&#xff0c;我们见到的数据集通常是如下的格式&#xff1a; input target ... ... &#xff0c;一个输入向量的集合以及对应的数据集合,就是我们想要去预测的值。 对于…

【转】深入理解JavaScript闭包(closure)

文章来源&#xff1a;http://www.felixwoo.com/archives/247 最近在网上查阅了不少Javascript闭包(closure)相关的资料&#xff0c;写的大多是非常的学术和专业。对于初学者来说别说理解闭包了&#xff0c;就连文字叙述都很难看懂。撰写此文的目的就是用最通俗的文字揭开Java…

从头开始建立神经网络翻译及扩展

目录翻译从头开始建立神经网络-简介导包和配置生成一个数据集实现用来展示决策边界的辅助函数Logistic Regression训练一个神经网络我们的神经网络如何进行预测学习神经网络的参数实现神经网络训练一个隐层有3个神经元的神经网络验证隐层神经元个数对神经网络的影响练习练习题解…

对比 C++ 和 Python,谈谈指针与引用

花下猫语&#xff1a;本文是学习群内 樱雨楼 小姐姐的投稿。之前已发布过她的一篇作品《当谈论迭代器时&#xff0c;我谈些什么&#xff1f;》&#xff0c;大受好评。本文依然是对比 C 与 Python&#xff0c;来探讨编程语言中极其重要的概念。祝大家读有所获&#xff0c;学有所…

《吴恩达深度学习》第一课第四周任意层的神经网络实现及BUG处理

目录一、实现1、吴恩达提供的工具函数sigmoidsigmoid求导relurelu求导2、实现代码导包和配置初始化参数前向运算计算损失后向运算更新参数组装模型3、问题及思考一、实现 1、吴恩达提供的工具函数 这几个函数这里只是展示一下&#xff0c;这是吴恩达写好的工具类&#xff0c;…

inverted dropout示例

目录1、前向传播2、后向传播这里是完成的吴恩达的深度学习课程作业中的一个inverted dropout的作业题&#xff0c;是一种很流行的正则化方式。这里做一个记录,重点记录了如何实现前向和后向的inverted dropout&#xff0c;都是代码片段&#xff0c;无法运行&#xff1b;完整的代…

球形坐标和Cartesian 坐标的转换 spherical coordinate

spherical coordinate 和cartesian坐标的转换&#xff0c; 个人认为在控制camera的时候最为有用&#xff0c;比如CS中的操作方式&#xff0c; 鼠标负责方向的改变&#xff0c;其恰恰就是球形坐标的改变。而camera的位置改变就是cartesian的改变&#xff0c;所以这两者的转换就必…

深度学习优化算法实现(Momentum, Adam)

目录Momentum初始化更新参数Adam初始化更新参数除了常见的梯度下降法外&#xff0c;还有几种比较通用的优化算法&#xff1b;表现都优于梯度下降法。本文只记录完成吴恩达深度学习作业时遇到的Momentum和Adam算法&#xff0c;而且只有简要的代码。具体原理请看深度学习优化算法…

【HANA系列】SAP HANA Studio出现Fetching Children...问题

公众号&#xff1a;SAP Technical本文作者&#xff1a;matinal原文出处&#xff1a;http://www.cnblogs.com/SAPmatinal/ 原文链接&#xff1a;【ABAP系列】SAP HANA Studio出现"Fetching Children..."问题前言部分 大家可以关注我的公众号&#xff0c;公众号里的排版…

朴素Bayse新闻分类实践

目录1、信息增益&#xff08;互信息&#xff09;介绍&#xff08;1&#xff09;西瓜书中的信息增益[^1]&#xff08;2&#xff09;PRML中的互信息[^2]&#xff08;3&#xff09; 其实他们是一个东西2、朴素Bayse新闻分类[^3]&#xff08;1&#xff09;常量及辅助函数&#xff0…

R树空间索引及其变种

1、R树及其变种&#xff1a;百度百科 2、R树详介&#xff1a;http://blog.csdn.net/jazywoo123/article/details/7792745 3、R树及变种小结 R树&#xff1a;叶子节点或中间节点都可能有交集。衡量指标有查询性能和更新性能&#xff0c;更新通过删除和插入实现。R树&#xff1a;…

Kaggle-泰坦尼克号

目录前言和感谢正题前言和感谢 机器学习本人还是一个新手&#xff0c;现在处在练习阶段。在网上找到了很多免费的比较老旧kaggle比赛讲解的python代码&#xff0c;在这里自己亲在体验并跟着过了一遍。在运行的过程中加入了自己的一些改动并且修改了一些存在的BUG&#xff0c;同…

hdu 六度分离 floyd

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1869 题意分析&#xff1a;比较简单的最短路算法&#xff0c;最后只需判断最远两点距离是否大于7即可。 /*六度分离Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot…

Kaggle-自行车租赁人数预测

目录前言和感谢正题前言和感谢 机器学习本人还是一个新手&#xff0c;现在处在练习阶段。在网上找到了很多免费的比较老旧kaggle比赛讲解的python代码&#xff0c;在这里自己亲在体验并跟着过了一遍。在运行的过程中加入了自己的一些改动并且修改了一些存在的BUG&#xff0c;同…

【数据仓库】OLTP系统和OLAP系统区别

OLTP&#xff1a;联机事务处理系统(OnLine Transaction Processing) OLAP&#xff1a;联机分析处理系统(OnLine Analytical Processing) 参考文档&#xff1a; 操作数据库系统(OLTP)和联机分析处理系统(OLAP)的区别转载于:https://www.cnblogs.com/badboy200800/p/11189478.htm…