矩阵

使用python绘制混淆矩阵

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-14 04:48:28
使用python绘制混淆矩阵 # 可视化分类器性能 # load libraries import matplotlib . pyplot as plt import seaborn as sns from sklearn import datasets from sklearn . linear_model import LogisticRegression from sklearn . model_selection import train_test_split from sklearn . metrics import confusion_matrix import pandas as pd # load data 加载数据 iris = datasets . load_iris ( ) # create feature matrix features = iris . data # create target vector target = iris . target # create list of target class names class_names = iris . target_names # split into training and test sets # 创建 训练集 测试集 features_train , features_test ,

LeetCode-对角线遍历二维数组

五迷三道 提交于 2020-01-14 01:33:36
LeetCode-对角线遍历二维数组 刷了一道题,是关于二维数组的,我这是第一次做二维数组的题目,因为对二维数组的不熟悉导致思路比较乱,中途甚至想要放弃,直接找题解,最终花了好长时间才做出来.虽然效率比较低,但是我觉得还是有必要记录一下思考的过程. 题目描述 给定一个含有 M x N 个元素的矩阵(M 行,N 列),请以对角线遍历的顺序返回这个矩阵中的所有元素,对角线遍历如下图所示。 输入: [ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 输出: [1,2,4,7,5,3,6,8,9] 解释: 说明: 给定矩阵中的元素总数不会超过 100000 。 我的解法思路 有个开发经验比我丰富很多的同事告诉我,做功能的时候先不要想着一步到位,可以先把基本的功能做出来再一点一点加东西.深以为然. 这个问题是对角线遍历,那我们把问题按照这个思路分解一下就是遍历---对角线遍历---符合题目顺序的对角线遍历 第一步:遍历 先把这个二维数组遍历出来. public int[] findDiagonalOrder(int[][] matrix) { int res0[] = new int[0]; if(matrix.length==0) return res0; List<Integer> list = new ArrayList(); for(int i=0;i

线性代数学习笔记

大城市里の小女人 提交于 2020-01-13 22:51:26
线性代数学习笔记 1 矩阵 1.0 矩阵的基本概念 首先需要了解基本的东西,矩阵. 定义一个矩阵 \(A\) 有 \(m\) 行 \(n\) 列,那么可以写成: \[ \begin{matrix} A_{1,1}\ A_{1,2}\cdots A_{1,n}\\ A_{2,1}\ A_{2,2}\cdots A_{2,n}\\ \ \ \ \ \ \ \ \vdots \\ A_{m,1}\ A_{m,2}\cdots A_{m,n}\\ \end{matrix} \] 我们还可以定义矩阵的数乘为 \(\lambda A\) ,相当于是给矩阵中所有的元素都乘上一个数字. 然后矩阵有如下性质: 结合率: \(ABC=A(BC)\) 数乘结合律: \(\beta(\lambda A)=\beta\lambda A\) ...(自行百度) 有一些特殊的矩阵,我们称之为 \(I\) , \(0\) . \(I\) ,单位矩阵,就是对角线全是 \(1\) ,其他位置都是 \(0\) 的矩阵. \(0\) ,零矩阵,就是所以位置都是 \(0\) 的矩阵. 1.1 矩阵的逆,矩阵的秩 矩阵的逆,就是存在一个矩阵 \(A^{-1}*A=I\) ,我们就称 \(A^{-1}\) 为 \(A\) 的逆矩阵. 矩阵的秩 \(A^{T}\) ,定义就是 \(A^{T}(i,j)=A(j,i)\) .

matlab提取cell元素

梦想的初衷 提交于 2020-01-13 21:30:32
Cell是Matlab中的一种数据类型,概念和结构类似。用大括号定义,括号里可以是任意类型的数据或矩阵。 关于cell的创建: 1.跟一般创建矩阵一样,直接使用C = {A B D E}这种形式,不过这里把"[]“改成了”{}" 2.使用cell创建cell,C= {C1 C2},这里C1和C2都是cell类型,直接把C1 C2作为一个cell得到的C3是一个1x2的cell数组;使用C3 = [C1 C2],是使用C1和C2的内容来创建cell数组 3.使用cell函数,A=cell(2,2),创建一个空的2x2的cell矩阵. 关于cell的访问: 1. X= C(s) 使用这种"()“形式的返回的是cell类 2. X = C{s} 使用这种”{}"形式的返回的是cell中的内容 3.其他的基本上与通常的数组.矩阵访问一样了 4. A{1,1}(2,3:end) 访问的是A中的第一个cell里面内容的第2行的第三个元素以后的所有元素 5. A{1,3}.name 访问的是A中的A{1,3}cell里面结构的name值 6.cell的图形化显示使用命令cellplot(A)即可如 B={[1;2]} ,这就定义了一个cell型的变量B,里面保存的是一个矩阵[1;2],要引用里面的数据只要在大括号里写上对应的下标即可,如B{1}。 下面我们给B再加个元素,我们可以这样定义B(2)

关于推荐系统的综述

£可爱£侵袭症+ 提交于 2020-01-13 20:50:28
推荐系统中的深度匹配模型 辛俊波 DataFunTalk 今天 文章作者:辛俊波 腾讯 高级研究员 编辑整理:Hoh Xil 内容来源:作者授权 文章出品:DataFunTalk 注:转载请联系作者本人。 导读: 推荐系统和搜索应该是机器学习乃至深度学习在工业界落地应用最多也最容易变现的场景。而无论是搜索还是推荐,本质其实都是匹配,搜索的本质是给定 query,匹配 doc;推荐的本质是给定 user,推荐 item。本文主要讲推荐系统里的匹配问题,包括传统匹配模型和深度学习模型。 深度学习之风虽然愈演愈烈,但背后体现的矩阵分解思想、协同过滤思想等其实一直都是贯穿其中,如 svd++ 体现的 userCF 和 itemCF 的思想,FM 模型本质上可以退化成以上大多数模型等。多对这些方法做总结,有助于更深刻理解不同模型之间的关联。 图1 推荐和搜索的本质,都是 match 的过程 PS:本文主要启发来源 SIGIR2018:Deep Learning for Matching in Search and Recommendation,重点阐述搜索和推荐中的深度匹配问题,非常 solid 的综述,针对里面的一些方法,尤其是 feature-based 的深度学习方法增加了近期一些相关 paper。 本文主要分为以下几部分: ❶ 推荐系统概述 ❷ 推荐系统的传统匹配模型 ❸ 基于

特征值分解与奇异值分解

佐手、 提交于 2020-01-13 16:50:11
https://www.cnblogs.com/fuleying/p/4466326.html 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。 1. 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 写成矩阵形式: 这时候λ就被称为特征向量v对应的特征值, 一个矩阵的一组特征向量是一组正交向量 。 2. 特征分解: 特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵, 正交矩阵是可逆的。 Σ = diag(λ 1 , λ 2 , ..., λ n )是一个对角阵,每一个对角线上的元素就是一个特征值。 首先,要明确的是, 一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。   当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向, 我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。 我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是之前说的: 提取这个矩阵最重要的特征。 总结一下,特征值分解可以得到特征值与特征向量,

室内定位系列(五)——目标跟踪(卡尔曼滤波)

混江龙づ霸主 提交于 2020-01-13 11:59:27
进行目标跟踪时,先验知识告诉我们定位轨迹是平滑的,目标当前时刻的状态与上一时刻的状态有关,滤波方法可以将这些先验知识考虑进来得到更准确的定位轨迹。本文简单介绍卡尔曼滤波及其使用。 原理 卡尔曼滤波的细节可以参考下面这些,有直观解释也有数学推导。 运动目标跟踪(一)--搜索算法预测模型之KF,EKF,UKF 初学者的卡尔曼滤波——扩展卡尔曼滤波(一) 理解Kalman滤波的使用 这里仅从目标定位跟踪的角度做一个简化版的介绍。 定位跟踪时,可以通过某种定位技术(比如位置指纹法)得到一个位置估计(观测位置),也可以根据我们的经验(运动目标常常是匀速运动的)由上一时刻的位置和速度来预测出当前位置(预测位置)。把这个观测结果和预测结果做一个加权平均作为定位结果,权值的大小取决于观测位置和预测位置的不确定性程度,在数学上可以证明在预测过程和观测过程都是线性高斯时,按照卡尔曼的方法做加权是最优的。 扩展: 在有些应用中,如果不是线性高斯的情况该怎么办?可以采用 EKF (扩展卡尔曼滤波),在工作点附近对系统进行线性化,即使不是高斯也近似成高斯去做。这样做有点太粗糙了,于是又有了 IEKF (迭代卡尔曼滤波,对工作点进行迭代优化), UKF或SPKF (无迹卡尔曼滤波,不做线性化,而是投影做出一个高斯分布去近似)。或者抛弃各种假设,直接采用蒙特卡洛的方式,假设出很多的粒子去近似分布,就是 PF

位运算的诱惑,FFT摇身一变FWT(快速沃尔什变换)(未完待续)

烂漫一生 提交于 2020-01-13 10:41:41
目录 参考文献 例题 符号约定 通用思路 规律性 限制性 可行性 可分治性 矩阵 和运算 非运算 异或运算 代码 小结 未完待续 真的想点接触这个玩意。 cmd写的OI多项式💊是真的顶。 参考文献 人称OI药丸: https://www.luogu.com.cn/blog/command-block/wei-yun-suan-juan-ji-yu-ji-kuo-zhan ZFY:你又从洛谷日报上抄袭,烦不烦呀。 如果能有源码我还自己打!QAQ 例题 例题 符号约定 ZFY:抄袭的第一步。。。 文中的多项式和下标均为向量, \([]\) 表示向量拼接(但是 \([\) 命题 \(]\) 就是当命题成立时为 \(1\) )。 \(A_{i}\) 表示 \(A\) 中的第 \(i\) 位, \(i_{j}\) 表示 \(i\) 的二进制中从高往低的第 \(j\) 位。 ZWQ:你这和照搬有什么区别。。。为什么不能有自己的思考呢?像我一样。 \(⊕\) 为位运算,&为和运算,^为异或,|为非运算。 规定 \(n\) 为总位数,且一定是 \(2\) 的次幂,记为 \(2^u\) 。 \(C[k]=\sum\limits_{i⊕j==k,0≤i,j≤n-1}A[i]*B[i]\) ,写成 \((A*B=C)\) ,称为位运算 \(⊕\) 的卷积形式。 称 \(DWT(A)\) 为 \(A\)

Java数组

房东的猫 提交于 2020-01-13 07:22:53
什么是数组 问:编写代码保存 4 名学生的考试成绩。 答:简单啊,定义 4 个变量呗 问:那“计算全年级 400 名学生的考试成绩”,肿么办 答: 。。。。。。。 数组 ,就可以帮助你妥妥的解决问题啦!! 数组可以理解为是一个巨大的“盒子”,里面可以按顺序存放多个类型相同的数据,比如可以定义 int 型的数组 scores 存储 4 名学生的成绩 数组中的元素都可以通过下标来访问,下标从 0 开始。例如,可以通过 scores[0] 获取数组中的第一个元素 76 ,scores[2] 就可以取到第三个元素 92 啦! 如何使用 Java 中的数组 Java 中操作数组只需要四个步骤: 1、 声明数组 语法: 数据类型[ ] 数组名; 或者 数据类型 数组名[ ]; 其中,数组名可以是任意合法的变量名,如: 2、 分配空间 简单地说,就是指定数组中最多可存储多少个元素 语法: 数组名 = new 数据类型 [ 数组长度 ]; 其中,数组长度就是数组中能存放元素的个数,如: 话说,我们也可以将上面的两个步骤合并,在声明数组的同时为它分配空间,如: 3、 赋值 分配空间后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例如向 scores 数组中存放学生成绩 4、 处理数组中数据 我们可以对赋值后的数组进行操作和处理,如获取并输出数组中元素的值 在 Java

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

我只是一个虾纸丫 提交于 2020-01-13 06:20:18
本题目是《剑指offer》中的题目 二维数组中的查找 题目:   在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 思路:   step1:首先取数组中右上角的数字   step2:判断如果等于目标值,则查找过程结束   step3:如果该数字大于目标值,剔除这个数字所在的列   step4:如果该数字小于目标值,剔除这个数在所在的行 C++ code class Solution { public: bool Find(int target, vector<vector<int> > array) { bool result = false; //返回结果值,默认为false,后期找到会更改此值 if (!array.empty()){ //审核数组是否为空,不为空进入,若为空,直接返回false int rows = array.size(); //提取二维数组的行数 int row = 0; //定义行迭代变量,从0开始迭代 int col = array[0].size()-1; //定义列迭代变量,从末尾开始迭代 while (row < rows && col >= 0){ //循环结束条件为行或者列超标 if (array