矩阵

简单多元线性回归(梯度下降算法与矩阵法)

China☆狼群 提交于 2020-01-13 06:04:19
from:https://www.cnblogs.com/shibalang/p/4859645.html 多元线性回归是最简单的机器学习模型,通过给定的训练数据集,拟合出一个线性模型,进而对新数据做出预测。 对应的模型如下: n: 特征数量。 一般选取残差平方和最小化作为损失函数,对应为: M: 训练样本数量。 通过最小化代价损失函数,来求得 值,一般优化的方法有两种,第一是梯度下降算法( Gradient Descent ),第二种是矩阵法( The normal equations )。 梯度下降算法 给 一个初始值,然后逐步的迭代改变的值,是代价损失函数逐次变小,使每次都往梯度下降的方向改变: 表示下降速度。 为了求偏导数,当只有一个样本时,即 ; 即: 当有多个训练样本时,下降梯度算法即为: 由于每次迭代都需要计算所有样本的残差并加和,因此此方法也叫做批下降梯度法( batch gradient descent),当有大规模数据时,此方法不太适合,可采取它得一个变种,即每次更新权重时,不是计算所有的样本,而是选取其中一个样本进行计算梯度,这个方法叫做随机下降梯度法( stochastic gradient descent): 随机下降梯度法与下降梯度法对比可能收敛更快,但是可能找不到最优点而在最优点附近徘徊。 矩阵求解法 由于梯度下降算法需要多次迭代,并且需要指定下降速率

有关ascii码的hill加解密

人走茶凉 提交于 2020-01-13 03:50:39
hill加解密的原理实际上就是利用可逆矩阵,将明文矩阵和加密矩阵进行计算得到密文,在接收端利用密文和加密矩阵的逆进行计算再得到明文。[加密矩阵][明文矩阵]%256=[密文矩阵],[加密矩阵的逆][密文矩阵]%256=[明文矩阵]。 本次实验是将一串明文英文字符串(可包含空格)作为输入,根据加密矩阵的阶数来构建对应的明文矩阵(明文转换为ascii码),然后与加密矩阵进行计算,对256取余再对密文进行转义输出成加密字符。解密时,先计算加密矩阵的逆,调用python的numpy包进行计算,结果输出都是小数,需要转换为分数,得到分子和分母,目的是为了方便计算小数对整数取余。 小数对整数取余,先转换为分数。在python里面调用fractions,v = fractions.Fraction(mat[j][i]).limit_denominator()#小数转分数,v.denominator和v.numerato#分别获取分子和分母。 假设(a/b)%256取余:(a/b)%256=x得到a(%256)=bx,继续得到bx=256k+a,即x=(256k+a)/b。把k从0开始取,直到x计算得到整数为之。35/3对256取余得到97。 实验输入和输出为: 请输入加密位数(-1结束):9 请输入明文:wo ai ni zhongguo! 明文矩阵: [[119, 97, 110, 122,

【Leetcode】240. Search a 2D Matrix II

拟墨画扇 提交于 2020-01-12 20:07:41
题目地址: https://leetcode.com/problems/search-a-2d-matrix-ii/ 给定一个矩阵,满足每行都是单调增的,每列也是单调增的。另给定一个数,问该矩阵是否包含这个数。基本思路是,选定矩阵最左下角的那个数 a a a ,如果 t a r g e t target t a r g e t 比 a a a 大,由于 a a a 所在列在 a a a 上方的数都比 a a a 小,所以不用再搜索,那就向 a a a 的右边走一步;如果 t a r g e t target t a r g e t 比 a a a 小,由于 a a a 所在行在 a a a 右边的数都比 a a a 大,所以不用再搜索,那就向 a a a 的上边走一步。如此这般,直到整个矩阵搜索完毕。 例如,我们要在下面的矩阵里搜索 5 5 5 : [ 1 4 7 11 15 2 5 8 12 19 3 6 9 16 22 10 13 14 17 24 18 21 23 26 30 ] \begin{bmatrix} 1 & 4 & 7 & 11 & 15\\ 2 & \textbf{5} & 8 & 12 & 19\\ \textbf{3} & \textbf{6} & 9 & 16 & 22\\ \textbf{10} & 13 & 14 & 17 & 24\\ \textbf

C语言基础:指针

旧街凉风 提交于 2020-01-12 18:10:52
【指针】 一、指针变量与定义 C语言有两种变量:其中变量(普通变量)存储内容值;地址变量(指针变量)存储地址值。 1、定义格式 类型名 *指针变量名;*是指针变量的标志,不包含在变量名里 注: (1)定义变量(普通变量、指针变量)都必须在前面有类型名。前类型后分号为定义语句。除此之外,其它语句都是执行语句。 (2)在定义指针变量时,指针变量名前的 * 表示现定义的是一个指针类型变量。星号并不是指针变量名的一总分,只是一个标志。 (3)指针变量专门用来存地址,禁止将一个整型直接赋给一个指针变量。 2、指针变量的引用 “&”取地址运算符,通过&运算符可以取出普通变量的地址。 “*”指针运算符,*可以取出指针变量所指向的普通变量的值(间接引用普通变量)。功能是 *地址 -》 取出内容值。 “&”“*”是单目运算符,优先级2级,方向从右向左 指针变量运算方法:(口诀四)地址变量得地址,得谁地址指向谁, 有*为内容值,不是读就是写,*在赋值号左边为写,其它都为读。无*为地址值,地址赋值意味着改指向。 注: (1)可以通过赋值使一个指针变量“指向”某一普通变量(指针变量=&普通变量)。 指针变量必须定义且初始化后再使用。 (2)在C语言中正确的做法是先让指针变量指向一个确定的存储单元后,再通过该指针变量引用它所指向的存储单元。 (3)变量名(普通变量、指针变量)都表示其存储单元内的值。 (4

numpy中的np.c_和np.r_用法详解

喜夏-厌秋 提交于 2020-01-12 13:00:28
用法: np.r_中的r是row(行)的缩写,是按行叠加两个矩阵的意思,也可以说是按列连接两个矩阵,就是把两矩阵上下相加,要求列数相等,类似于pandas中的concat()。 np.c_中的c是column(列)的缩写,是按列叠加两个矩阵的意思,也可以说是按行连接两个矩阵,就是把两矩阵左右相加,要求行数相等,类似于pandas中的merge()。 示例1: 【注意】a和b虽然以行向量的形式显示,但是根据其打印的shape可知其默认是列向量! 使用reshape修改a,b的形状后再次调用np.c_和np.r_效果如下: 示例2: 来源: CSDN 作者: 遗忘的大城小事 链接: https://blog.csdn.net/qq_34449717/article/details/103751871

COCO数据集合格式

主宰稳场 提交于 2020-01-12 11:31:15
COCO数据集合格式 Y_Wolf(2020.01.12) “captions” : 看图说话 根据图片对对象进行描述 “info” : 基本信息 “year” : 年份(int) “version” : 版本编号(str) “description” : 数据集描述(str) “contributor” : 提供者(str) “url”: 下载地址(str) “date_created”: 创建日期(datetime) “licenses” : 图片许可证 “id” : 许可证ID(int) “name” : 许可证说明(str) “url” : 图片来源(str) “images” : 图片信息 “id” : 图片ID——不重复(int) “width” : 图片像素宽度 (int) “height”: 图片像素高度(int) “file_name” : 图片名称(str) “license” : 许可证ID(int) “flickr_url”: 图片在flickr上的地址(str) Flickr是雅虎的一个图片存储和视频托管网站 “coco_url” : 图片地址(str) “date_captured” : 数据获取日期(datetime) “annotations” : 对象信息 “id” : 对象ID(int) 因为一张图片可以有很多个对象,比如一个服装模特图

1,二维数组中的查找《剑指offer》

烈酒焚心 提交于 2020-01-12 09:16:21
题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路: 因为从左到右递增,从上到下递增,所以很容易发现是二分查找的变体,需要找到一个点(p),左边的数比这个数小,右边的比他大,所以又可以知道右上角的数字都是满足这个条件的;然后通过比较右上角的数字和目标数字的大小(target):   1.如果 比target大,那么证明这个数所在列不可能存在这个数字,可以将整列排除(col--);   2.如果比target小,那么证明这个数字所在的行不可能存在这个数字,将整行排除( row++ ); 直到循环结束,或者找到该数字; 代码: //c++ bool Find(int target, vector<vector<int> > array) { int rows=array.size(); int cols=array[0].size(); int row=0; int col=cols-1; while(row<rows&&col>-1){ if(array[row][col]==target)return true; else if(array[row][col]>target)--col; else ++row; } return false; }   

矩阵分解

拜拜、爱过 提交于 2020-01-12 07:18:42
1、svd分解 2、QR分解 3、三角分解 4、满秩分解 5、Jordan分解 来源: CSDN 作者: xwemin 链接: https://blog.csdn.net/xwemin/article/details/103801174

矩阵树定理

泄露秘密 提交于 2020-01-12 07:09:42
一些概念   度数矩阵: a [ i ] [ i ] = d e g r e e [ i ] ,其他等于 0   入度矩阵: a [ i ] [ i ] = i n _ d e g r e e [ i ] ,其他等于 0   出度矩阵: a [ i ] [ i ] = o u t _ d e g r e e [ i ] ,其他等于 0   邻接矩阵: 边 集 a [ i ] [ j ] = [ ( i , j ) ∈ 边 集 ] 边集a[i][j]=[(i,j)∈边集]   基尔霍夫矩阵:度数矩阵-邻接矩阵   外向树:长成树的样子但是边有方向,方向为 根-->叶子                            内向树:长成树的样子但是边有方向,方向为 叶子-->根                          前置技能   三角矩阵:只有主对角线及其上方的位置有值,主对角线以下的部分都是 0   行列式的求值:先用高斯消元把这个行列式消成一个上三角矩阵的形式然后直接把对角线上的数乘起来得到这个行列式的值   余子式:一个行列式的余子式就是这个行列式去掉任意一行一列后剩下的那个少了一维的行列式    无向图的生成树计数   无向图的话生成树个数就是这个图的基尔霍夫矩阵的 任意一个余子式 的行列式值 有向图的生成树计数 ​  有向图的话分成两种情况: ​  1、求外向树

Tensorflow深度学习应用(进阶篇)-回归(函数拟合训练)-可视化

天涯浪子 提交于 2020-01-12 03:18:47
#coding=gbk ''' 进阶篇: 多元回归: 建模问题: Y=x1xx1+x2xw2+x3xw3+...+xnxwn+b,矩阵简化表示Y=XW+b numpy库基础: 整型的一个数字, 不能取得其shape(维度),通过np.array()可以将其转换成一个标量(数组),可以取得shape; 一般问题: 需要对重要的特征以及次要特征进行范围的限定,即需要对数据进行归一化,有助于模型的收敛。 特征值/(最大特征值-最小特征值)~[0,1] 特征数据归一化: 特征值/(最大特征值-最小特征值)~[0,1],标签不做处理 扩展篇 ''' from pylab import mpl mpl . rcParams [ 'font.sans-serif' ] = [ 'SimHei' ] #设置显示绘图显示中文 mpl . rcParams [ 'axes.unicode_minus' ] = False #防止中文乱码,有时候第一句不能完全避免显示错误 #导入tensorflow 模块 import tensorflow . compat . v1 as tf import matplotlib . pyplot as plt import numpy as np import pandas as pd from sklearn . datasets import load