机器学习笔记之多元线性回归

一、引言——多特征的房价预测 现实中,某一变量并不一定只与单一变量有关。还以房价来举例,除了位置以外,房价还可能与房子面积、卧室数量、层数、房龄等因素有关。 面积 卧室数 层数 房龄 房价 2104 5 1 45 460 1416 3 2 40 232 1534 3 2 30 315 852 2 1 36 178 … … … … … 对于多个特征的情况,我们需要对之前的一元线性回归进行推广。但在此之前,需要先约定一下使用的符号: 和前面一样,这里将用 $x^{(i)}$ 表示第 i 组样本中的特征。 $y^{(i)}$ 表示第 i 组样本对应的目标结果。不同的是,对于第 j 个特征组,也就是第j个特征对应的数值的序列,采用 $x_{j}$ 表示。那么很自然的, $x^{(i)}_j$ 表示第 j 个特征中的第 i 个值,或者说表示第 i 组样本中的第 j 个特征。 与上文中的列表相结合进行理解,相当于 $x^{(i)}$ 表示第 i 行中非房价的部分,$x_{j}$ 则表示第 j 列中的数值。 要对多元特征进行拟合,也就是找到适当的 $w_1, w_2, ..., w_n$ 使得对任意的 i,有 $$ y^{(i)} = w_1 * x^{(i)}_1 + w_2 * x^{(i)}_2 + ....

九月 26, 2022 · 3 分钟 · 609 字 · Wokron

机器学习笔记之一元线性回归

一、引言——房价预测问题 问题: 假设我们知道一些房价与距离的对应关系,通过这些已知的信息,能否预测在一定范围内任意距离对应的房价? 首先考虑最为简单的情况,也就是只有两个房价信息的情况。 如图所示,1km时对应房价为300,2km 时对应房价为500。很容易可以在这两点间连一条直线,这条直线就可以作为对房价的预测。这样用曲线对已知数据中的关系进行估计的方法称为拟合。 (注意,本文只考虑以一元线性函数进行拟合) 类似的,增加房价信息为三个点,如果三点共线,则该直线依然可以作为对房价的拟合。 但更可能的情况是三点不共线,对于更多的数据的情况则更是如此。这样的话要如何找到一条直线来拟合房价信息呢? 二、损失函数 我们需要找到一种标准来衡量直线对已有信息的拟合程度。 假设当前直线为: $$ y = wx+b $$ 房子距离为 $x^{(1)},x^{(2)},x^{(3)}...,x^{(m)}$,对应的房价为 $y^{(1)},y^{(2)},y^{(3)}...,y^{(m)}$。 则对于每个距离 $x^{(i)}$,当前直线所预测的房价为: $$ \hat{y}^{(i)} = wx^{(i)} + b $$ 该房价与真正的房价的差距为 $$ d = |y^{(i)} - \hat{y}^{(i)}| $$ 绝对值不可导,不妨用平方来代替 $$ d_2 = (y^{(i)} - \hat{y}^{(i)})^2 $$ 对于每个已知的房价信息,当前直线的预测都可能会有偏差,将这些偏差求和得到总的偏差 $$ \sum_{i=1}^{m}(y^{(i)} - \hat{y}^{(i)})^2 $$ 为了排除样本数量不同对偏差的影响,将偏差总和除以样本数量 $$ \frac{1}{m}\sum_{i=1}^{m}(y^{(i)} - \hat{y}^{(i)})^2 $$ 这也就是总体方差的计算式: $$ \sigma^2 = \frac{1}{m}\sum_{i=1}^{m}(y^{(i)} - \hat{y}^{(i)})^2 $$ 对于机器学习,我们将$\hat{y}^{(i)}$展开,并将方差除以2,得到一元线性回归的损失函数(loss function),即 $$ J(w, b) = \frac{1}{2m}\sum_{i=1}^{m}(y^{(i)} - wx^{(i)} - b)^2 $$ 在 $x^{(i)}$,$y^{(i)}$ 确定的情况下,损失函数是关于 $w$ 和 $b$ 的连续可导的二元函数。该函数可以用来衡量 $w,b$ 所确定的直线与已知数据之间的偏差。...

九月 25, 2022 · 2 分钟 · 361 字 · Wokron

基本正则表达式总结

简介 正则表达式是用于描述字符串匹配模式的表达式。利用正则表达式进行匹配,可以实现检查字符串是否符合某种规则、字符串是否含有某种子串;替换匹配的子串或者从某个串中取出符合某个条件的子串。 正则表达式的引擎是一种自动机,在根据规则完成自动机的构建后,对任意字符串的匹配都将花费 O(n) 的时间复杂度。有关正则表达式的理论及实现本文并不继续深入。 基本语法 这里将介绍正则表达式的基本语法。另外这里推荐网站 regex101,可以用于验证正则表达式。 字符与字符集 正则表达式中一般的字符用于匹配字符串中对应的相同字符。例如正则表达式 “a” 可以匹配字符串中的字符 ‘a’ 。 “abc” 可以匹配字符串中的子串 “abc” 。 对于在正则表达式中具有特殊含义的字符,需要进行转义,在原字符前加上反斜杠 “\” 用方括号将一个或多个字符括起来表示一个字符集,一个字符集匹配在该字符集中出现的字符。例如 [abc],可以匹配 ‘a’ ‘b’ 或 ‘c’。 还可以在字符集中指定要匹配的字符的范围,例如 [a-z],用来匹配所有的小写英文字母。在同一字符集内可以有多个范围,例如 [a-zA-Z0-9]。 在字符集括号内的所有字符之前添加 “^” 表示对该字符集取反,即匹配所有不在字符集内的元素。例如 [^a-b] 匹配所有不是小写英文字母的元素。 字符 “.” 可用于匹配换行符为所有字符。 限定符 限定符用来指定其前面的部分将要匹配几次。例如a{2,5}匹配2到5个a,即"aa"、“aaa”、“aaaa"和"aaaaa”。具体的限定符含义如下表所示: 限定符 解释 {n} 匹配内容n次 {n,} 匹配内容次数大于等于n次 {n,m} 匹配内容次数为n到m次 * 匹配零次或多次,同{0,} + 匹配一次或多次,同{1,} ? 匹配零次或一次,同{0,1} 注意,限定符匹配默认遵循贪婪原则,即在同样能够完成匹配的情况下,会匹配尽可能多的字符。例如要匹配<html><dir>hello,world</dir></html>中的标签,若使用正则表达式 “<.+>",则只会匹配整个字符串。 解决方法是在限定符后加上一个问号 “?” 。这样限定符的匹配模式便会切换为懒惰匹配,即在同样能够完成匹配的情况下,会匹配尽可能少的字符。 组 用括号将一部分表达式括起,可以将这部分表达式作为一个整体。 比如说,需要匹配 “aacacaaac”,可以归纳出字符串中重复的部分 “a+c”,将该部分作为一个整体,则该部分重复了三次。最终得到可以匹配该字符串的正则表达式为 “(a+c){3}"。 另外,组分为捕获组与非捕获组,捕获组即单纯的括号,非捕获组包括 “(?:exp)” “(?=exp)” “(?!exp)” “(?<=exp)” “(?<!exp)"。这里先说明 “(exp)” 和 “(?...

九月 21, 2022 · 2 分钟 · 241 字 · Wokron

系统编程之命令行编译

一、前言 本文将简单介绍在Linux系统下的命令行编译流程。介绍gcc、gdb、make等工具的简单使用。 二、GCC 基本操作 编译选项 无选项编译链接 用法:gcc test.c 作用:将 test.c 预处理、编译、汇编并链接形成可执行文件。这里未指定输出文件,默认输出为 a.out。 选项 -o 用法:gcc test.c -o test 作用:将 test.c 预处理、编译、汇编并链接形成可执行文件 test。-o 选项用来指定输出文件的文件名。 选项 -E 用法:gcc -E test.c -o test.i 作用:将 test.c 预处理输出 test.i 文件。 选项 -S 用法:gcc -S test.i 作用:将预处理输出文件 test.i 编译成 test.s 文件。 选项 -c 用法:gcc -c test.s 作用:将汇编语言文件 test.s 汇编成目标代码 test.o 文件。 无选项链接 用法:gcc test.o -o test 作用:将目标代码文件 test.o 链接成最终可执行文件 test。 选项 -O 用法:gcc -O1 test.c -o test 作用:使用编译优化级别 1 编译程序。级别为 1~3,级别越大优化效果越好,但编译时间越长。 官方文档:GCC, the GNU Compiler Collection...

九月 12, 2022 · 3 分钟 · 589 字 · Wokron

Hexo 个人博客搭建及主题配置教程

一、前言 本文是作者对于Hexo搭建的阶段总结。汇总了一些搭建过程中找到的资料。希望能够较为全面的记录博客搭建的全过程。给自己备忘,为他人提供帮助。 二、搭建阶段 (1)Hexo简介 Hexo是一款基于Node.js的静态博客框架,依赖少易于安装使用,可以方便的生成静态网页托管在GitHub和Coding上,是搭建博客的首选框架。大家可以进入hexo官网进行详细查看,因为Hexo的创建者是台湾人,对中文的支持很友好,可以选择中文进行查看。 (2)前期安装 安装Git Git是目前世界上最先进的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。也就是用来管理你的hexo博客文章,上传到GitHub的工具。 windows:到git官网上下载,Download git,下载后会有一个Git Bash的命令行工具,以后就用这个工具来使用git。windows在git安装完后,就可以直接使用git bash来敲命令行了。 linux:对linux来说实在是太简单了,因为最早的git就是在linux上编写的,只需要一行代码 sudo apt-get install git 安装好后,用git --version来查看一下版本。 安装nodejs Hexo是基于nodeJS编写的,所以需要安装一下nodeJs和里面的npm工具。 windows:nodejs选择LTS版本就行了。 linux: sudo apt-get install nodejs sudo apt-get install npm 安装完后,打开命令行 node -v npm -v 检查一下有没有安装成功 安装Hexo 前面git和nodejs安装好后,就可以安装hexo了,可以先创建一个文件夹blog,然后cd到这个文件夹下(或者在这个文件夹下直接右键git bash打开)。 输入命令 npm install -g hexo-cli 用hexo -v查看一下版本,至此就全部安装完了。 接下来初始化一下hexo hexo init myblog 这个myblog可以自己取什么名字都行,然后 cd myblog //进入这个myblog文件夹 npm install 新建完成后,指定文件夹目录下有: node_modules: 依赖包 public:存放生成的页面 scaffolds:生成文章的一些模板 source:用来存放你的文章 themes:主题 _config.yml: 博客的配置文件** 打开hexo的服务 hexo g hexo server 在浏览器输入localhost:4000就可以看到你生成的博客了。...

九月 11, 2022 · 4 分钟 · 640 字 · Wokron

FunctionSketch 说明文档

一、简述 本文档将介绍程序函数画板的主要功能和基本操作。函数画板是一款轻量的函数绘制软件。支持单变量函数、参数方程、隐函数的绘制。可以采用直角坐标和极坐标绘制简单图像,并带有求导、积分、二维线性变换等功能。 二、函数绘制 1、添加函数 运行exe文件后,将进入程序的主界面。如下图所示。 点击右侧“函数列表”栏内的加号按钮,将出现表达式的输入框。 输入函数表达式后按回车键(或采取使输入框不再被选中的操作),若表达式正确,则会将该表达式所对应的函数绘制到主界面左侧的窗口上。 其中正确的表达式包括如下几种情况: 表示单变量函数 此时表达式请以x为自变量,不忽略运算符(特别注意,对数如logm(n)请写作mlogn)。表达式前可忽略“y=”。例如“y=x+x^2”或“x*(elogx)” 表示参数方程 此时请同时输入两个单变量函数表达式,以x或t为自变量,两表达式间以逗号间隔。注意请不要在两个表达式前添加“x=”或“y=”。例如“t^2,t”或“sinx,cosx” 表示隐函数(或一般的方程) 此时请以x,y表示横纵两坐标轴对应的变量。表达式中必须包含等号。例如“x^2+y^2=1”。当等式左侧为“y=”时自动转换为单变量函数计算。 另外,一次输入可以绘制多个图像。若要输入多个表达式,请将各表达式以分号间隔。 2、函数属性设置 添加函数后,函数图像将在左侧窗口内显示,同时右侧函数列表栏内也会出现记录该函数信息的卡片(超出范围的卡片可以滑动滚轮以查看)。 每一个函数信息卡右侧有两个按钮。上面标有“x"字的按钮点击后可关闭该函数卡并删除左侧窗口内对应的函数图像。下面显示“···”符号的按钮,点击后可以设置该函数相关的属性。主要包括如下内容。 坐标形式 单变量函数和参数方程共有。设置图像以直角坐标或极坐标形式呈现。 线性变换 单变量函数和参数方程共有。表示一个2*2矩阵。在绘制过程中,图像的每一个坐标点会与该矩阵相乘。 位移 单变量函数和参数方程共有。表示一个二维矢量。在绘制过程中,图像的每一个坐标点会与该矢量相加。 积分 单变量函数特有。表示一个积分区间。默认不计算积分(积分范围NaN->NaN)。若输入正确的积分范围,则会在左侧窗口内将求积分的面积涂色。并在信息卡上显示积分结果。 求导 单变量函数特有。点击求导按钮后会求一阶导数,并将得到的新函数添加到函数列表栏的末尾。图像也会在左侧窗口内显示。 参数范围 参数方程特有。用以表示参数的范围。左侧窗口内只会绘制参数范围内的图像。 三、保存文件 1、保存当前函数图像 点击主窗口上侧菜单栏“文件”选项。其中第一项“保存”可以将当前绘制的图像保存为图片格式(当前暂时只支持jpg格式)。 2、查看默认保存位置 第二项“打开默认保存路径”会打开exe所在路径之下的SaveImage文件夹。可用于作为保存文件的位置。 四、设置 1、绘制设置 点击菜单栏“设置”选项,会打开一个设置窗口。 其中前三项用于绘制设置。 显示范围 相对位置用于设置当前显示位置与默认位置的偏移量。可以理解该值为一个表示当前窗口显示的位置相对于原点的坐标。 显示宽度用于设置当前窗口宽度下,横坐标数值的变化范围。 (该项设置也可以在主界面显示窗口用鼠标拖动和滚轮实现。) 线条颜色 设置图像曲线、坐标轴、积分区域的颜色。 线条宽度 设置图像曲线、坐标轴线条的粗细。注意该粗细不会随着窗口的缩放而发生变化。 2、算法设置 设置窗口第四项用于设置算法相关参数。算法原理详见设计文档。 基本 最小绘制间隔即生成基本绘制点时自变量的间隔。 平滑算法 平滑算法用于处理曲率较大的情况。平滑率表示连点绘制的曲线的“尖锐度”的阈值,过于“尖锐”的部分将被试图平滑。最大递归层数用于避免过深的递归,减少绘制时间。 Marching Square算法 Marching Square算法用于处理一般方程,能较有效地绘制隐函数图像。但计算量较大,以dx为单位长度绘制速度较慢。因此以dx乘以某一常数得到的长度作为新的单位长度,该常数即方块比例。 五、帮助 1、查看源代码 点击菜单栏“帮助”选项,第一项“源代码”点击后会转到保存该程序源代码的github仓库。 2、操作说明 第二项“操作说明”可以打开一个新的帮助窗口,其中记录了一些较为常见的操作的提示。可在使用时随时查看。

九月 10, 2022 · 1 分钟 · 62 字 · Wokron