咳咳.... 马上继续写书去算了( #Java 真的是时间永远不够用
看起来我打算加入的章节,这次恐怕都没有时间加入了呢。
这个星期主要是看了三本书,先说说基本感想。
《手把手教你学 FPGA 设计》:巨好评 👍👍
作者果不其然是真·高手啊!况且现在敢入、能入电子工业和无线电的人大概是少数吧,当初进入已经非常了不起了,现在又来教下一辈,还是以这么通透的理解层次!
而且他还在华为海思半导体公司加入了新一代无线通讯技术(貌似是 4G 或以上?) 跳频 OFDM 无线多地址通讯系统的研发,他技术行文的简洁性也透露着自己的实力、例子也举的非常合适,非常符合工程实践,有 SDRAM[1]、UART[2]、VGA[3]、LED[4] 显示温度计、边缘扫描图像处理硬件等,但是书居然只有两百多面,而且算法(Verilog 硬件描述语言)还写全了!这个 PLD 教学真可以说是中国第一简单实用快速!
—
[1]: SDRAM: 同步[6]动态随机访问存储器,Synchronized Dynamic Random Access Memory,它是一种易失性(volatile)存储器,和 SRAM (静态)的区别是因为内部晶体管电荷保存时间有限,必须按照固定频率刷新才能保证内部数据不会丢失,而 SRAM 就不需要;一般来说高质量的存储用途(比如缓存)会使用 SRAM,因为它不需要浪费时间去进行刷新操作
不都用 SRAM 的原因是它太贵了,DRAM 一个晶体管就可以实现的存储容量(比如 1* bit) SRAM 要六个 🤪 体积大,而且用户买不起。
[2]: UART: 通用异步收发传输器,Universal Asynchronous Receive Transmit
这娃是传输字符用的(类比 TTY),嵌入式开发里一般用它调试目标板子。[5]
[3]: VGA: 最开始由 IBM 设计的视频接口标准“视频图形阵列”,Video Graphics Array
[4]: 发光二极管,这里指 “8” LED 阵列式数值显示用的元件
[5]: 板子一般指单片机或者嵌入式片上系统;
最开始我把 UART 误解为“通用并行设备总线”了(伪造 USB,通用串行设备总线,误)
[6]: 同步是指和其他器件(一般是微处理器、微控制器)的时钟节拍信号同步对齐
—
《零起点 Python 机器学习快速入门》:中评 😐
作者是一个做中文字库的(字王工作室),自产有《中华大字库》、TopQuant 足彩分析等,也是一个其他信息行业奠基者的角色,(对我来说)是个先辈,但是他对程序设计的理解有点独特但不是很深刻,书上的图示、算法接口资料还比较齐全,
示例数据集主要讲的是 Iris 爱丽丝花卉子种属数据集,以及一个 CCPP 发电厂电力输出数据集。
全本书讲了 sklearn (scikit)、Pandas、Matplotlib 的使用,当然没有提到 Numpy、Numba、OpenCL、OpenMP、PyCUDA 等高性能计算库的使用(“黑箱”教学),但是提了名字
算法没有讲太多算法细节,只是给你几个封装函数做学习、测试数据切分 (
前面还教你如何进行『分类名称』“矢量”化(就不在这里喷这个名词使用的错误了[1],虽然可能不是他自己最开始用的)...
这里不吐槽任何槽点,但是本书的槽点还是很多的,看上 100 面大概能找到十七八个,不过不得不说对于机器学习入门来说这本书也不错(即使里面有些文字我打算专门吐槽一下...)。
再者,因为我这里绝对没有任何其他的机器学习书了...
《持续轻量级 JavaEE 开发》:好评 👍
作者们都是 RedHat JBoss 多项目的资深工程师、项目经理什么的,面向对象编程大师。
然后马上要放暑假了,真是 🎉
GeekApk 又有一次复活的机会了,正好我最近在看 JavaEE,刚对 EE 那些真的是有点复杂的依赖注入、Observer、Interceptor、单元测试、Service locator pattern、反射元编程和声明(annotations) 有点感觉了
打算弄点大新闻出来 🐸
—
[1]: 矢量化:这里是指,对于一个数据表(书上的是 Iris 种属分类)
如果要学习(数据分析)的一项是(可能不可导、不可进行传统统计概率数值运算的)聚合量(product type)比如一个
矢量,在物理上是有方向的量[2],数学上(尤其线性代数)矢量化是指把矩阵转化为线性序列的形式,请问这里它的宾语(目标)是指『这个数据表
不管怎么样,看起来都有点不太对吧?哈?算了....
缺点当然是很明显的,比如 Iris 分类器的例子,作者就这么对三种种属『“矢量化”』了一波(取的『编号』,虽然那实际上是逼近的参数之一.... 都是 1,2,3 这种),Linear regression 的结果很差很辣鸡,只比随机三选一好一点。
然而实际上可以多准确呢?同数据集 KNN 分类器(K-最近邻分类法,最简单的机器学习算法之一,特征聚合映射到 N 维空间判距离上 k 最近邻中数目最多的分类,用作者的话,当然我觉得还行的就是『物以类聚』)学习后给出的判断准确率是 100%!
何况,作者『映射』分类预测结果回来(实际上没有映射回
作者自己的确是做数据分析的,可是他对编程的理解.... 我觉得真的不是特别值得学习
我可没有随便对自己完全不理解的东西乱说话,至少我能找到一篇文章给我背书:
Conmajia::CodeProject::前馈全连接神经网络和函数逼近、时间序列预测、手写数字识别
这里面没有 Python 书里作者所谓的『矢量化』, 但只是学习模型的不同而已(线性回归 vs. 人工神经网络),不过 Sklearn 有 one-hot encoding 的实现,作者还是要用『矢量化』定 1,2,3,明明说都到『CPU 加法器』的级别了,却连二进制都没注意到,也真是服气了....
>>>
>>>
[2]:第一次的时候搞错了... 物理上那个是向量,基本无关的东西
看起来我打算加入的章节,这次恐怕都没有时间加入了呢。
这个星期主要是看了三本书,先说说基本感想。
《手把手教你学 FPGA 设计》:巨好评 👍👍
作者果不其然是真·高手啊!况且现在敢入、能入电子工业和无线电的人大概是少数吧,当初进入已经非常了不起了,现在又来教下一辈,还是以这么通透的理解层次!
而且他还在华为海思半导体公司加入了新一代无线通讯技术(貌似是 4G 或以上?) 跳频 OFDM 无线多地址通讯系统的研发,他技术行文的简洁性也透露着自己的实力、例子也举的非常合适,非常符合工程实践,有 SDRAM[1]、UART[2]、VGA[3]、LED[4] 显示温度计、边缘扫描图像处理硬件等,但是书居然只有两百多面,而且算法(Verilog 硬件描述语言)还写全了!这个 PLD 教学真可以说是中国第一简单实用快速!
—
[1]: SDRAM: 同步[6]动态随机访问存储器,Synchronized Dynamic Random Access Memory,它是一种易失性(volatile)存储器,和 SRAM (静态)的区别是因为内部晶体管电荷保存时间有限,必须按照固定频率刷新才能保证内部数据不会丢失,而 SRAM 就不需要;一般来说高质量的存储用途(比如缓存)会使用 SRAM,因为它不需要浪费时间去进行刷新操作
不都用 SRAM 的原因是它太贵了,DRAM 一个晶体管就可以实现的存储容量(比如 1* bit) SRAM 要六个 🤪 体积大,而且用户买不起。
[2]: UART: 通用异步收发传输器,Universal Asynchronous Receive Transmit
这娃是传输字符用的(类比 TTY),嵌入式开发里一般用它调试目标板子。[5]
[3]: VGA: 最开始由 IBM 设计的视频接口标准“视频图形阵列”,Video Graphics Array
[4]: 发光二极管,这里指 “8” LED 阵列式数值显示用的元件
[5]: 板子一般指单片机或者嵌入式片上系统;
最开始我把 UART 误解为“通用并行设备总线”了(伪造 USB,通用串行设备总线,误)
[6]: 同步是指和其他器件(一般是微处理器、微控制器)的时钟节拍信号同步对齐
—
《零起点 Python 机器学习快速入门》:中评 😐
作者是一个做中文字库的(字王工作室),自产有《中华大字库》、TopQuant 足彩分析等,也是一个其他信息行业奠基者的角色,(对我来说)是个先辈,但是他对程序设计的理解有点独特但不是很深刻,书上的图示、算法接口资料还比较齐全,
示例数据集主要讲的是 Iris 爱丽丝花卉子种属数据集,以及一个 CCPP 发电厂电力输出数据集。
全本书讲了 sklearn (scikit)、Pandas、Matplotlib 的使用,当然没有提到 Numpy、Numba、OpenCL、OpenMP、PyCUDA 等高性能计算库的使用(“黑箱”教学),但是提了名字
算法没有讲太多算法细节,只是给你几个封装函数做学习、测试数据切分 (
ai_data_cut)、学习 (mx_*)、回归 (predict 方法)、测试 (ai_acc_xed) (用于判断数据预测的准确率,就是对 test 数据集,准备好预测到的结果,取实际 test 的结果,判断 (误差小于目标 k 的结果项目份数/总份数))前面还教你如何进行『分类名称』“矢量”化(就不在这里喷这个名词使用的错误了[1],虽然可能不是他自己最开始用的)...
这里不吐槽任何槽点,但是本书的槽点还是很多的,看上 100 面大概能找到十七八个,不过不得不说对于机器学习入门来说这本书也不错(即使里面有些文字我打算专门吐槽一下...)。
再者,因为我这里绝对没有任何其他的机器学习书了...
《持续轻量级 JavaEE 开发》:好评 👍
作者们都是 RedHat JBoss 多项目的资深工程师、项目经理什么的,面向对象编程大师。
然后马上要放暑假了,真是 🎉
GeekApk 又有一次复活的机会了,正好我最近在看 JavaEE,刚对 EE 那些真的是有点复杂的依赖注入、Observer、Interceptor、单元测试、Service locator pattern、反射元编程和声明(annotations) 有点感觉了
打算弄点大新闻出来 🐸
—
[1]: 矢量化:这里是指,对于一个数据表(书上的是 Iris 种属分类)
如果要学习(数据分析)的一项是(可能不可导、不可进行传统统计概率数值运算的)聚合量(product type)比如一个
str (char 的 homogenous product type)那就先将其『标号化』、学习,再在回归的时候映射回来矢量,在物理上是有方向的量[2],数学上(尤其线性代数)矢量化是指把矩阵转化为线性序列的形式,请问这里它的宾语(目标)是指『这个数据表
pandas.DataFrame』呢?还是 Python 的 built-in type str 呢?不管怎么样,看起来都有点不太对吧?哈?算了....
vec(A) = {
a[1,1], ..., a[m,1],
a[1,2], ..., a[m,2],
a[1,n], ..., a[m,n] }(^T
)
简而言之就是把 2x2 矩阵 { a b;; c d } 变成元组 [ a c b d ], 看上面的递推式子也知道了缺点当然是很明显的,比如 Iris 分类器的例子,作者就这么对三种种属『“矢量化”』了一波(取的『编号』,虽然那实际上是逼近的参数之一.... 都是 1,2,3 这种),Linear regression 的结果很差很辣鸡,只比随机三选一好一点。
然而实际上可以多准确呢?同数据集 KNN 分类器(K-最近邻分类法,最简单的机器学习算法之一,特征聚合映射到 N 维空间判距离上 k 最近邻中数目最多的分类,用作者的话,当然我觉得还行的就是『物以类聚』)学习后给出的判断准确率是 100%!
何况,作者『映射』分类预测结果回来(实际上没有映射回
str,但这里和我说的实际上是一个情况)的时候使用的(浮点)算法是直接 truncate 掉小数部分然后 if else if.... (不如 switch ....),还不如四舍五入好呢(不要忘记了这个『矢量』实际上代表的是一个分类!)作者自己的确是做数据分析的,可是他对编程的理解.... 我觉得真的不是特别值得学习
我可没有随便对自己完全不理解的东西乱说话,至少我能找到一篇文章给我背书:
Conmajia::CodeProject::前馈全连接神经网络和函数逼近、时间序列预测、手写数字识别
这里面没有 Python 书里作者所谓的『矢量化』, 但只是学习模型的不同而已(线性回归 vs. 人工神经网络),不过 Sklearn 有 one-hot encoding 的实现,作者还是要用『矢量化』定 1,2,3,明明说都到『CPU 加法器』的级别了,却连二进制都没注意到,也真是服气了....
>>>
from sklearn import preprocessing
>>> le = preprocessing.LabelEncoder()
>>> le.fit([1, 2, 2, 6])
LabelEncoder()>>>
le.classes_
array([1, 2, 6])[2]:第一次的时候搞错了... 物理上那个是向量,基本无关的东西
Wikipedia
视频图形阵列
視訊圖形陣列(英語:Video Graphics Array,缩写:VGA)是IBM的一個使用類比訊號的電腦顯示標準,在1987年随IBM PS/2系列计算机推出。VGA是大多数PC制造商所遵循的最后一个IBM图形标准,几乎1990年后的所有PC图形硬件都最低支持VGA。
duangsuse::Echo
咳咳.... 马上继续写书去算了( #Java 真的是时间永远不够用 看起来我打算加入的章节,这次恐怕都没有时间加入了呢。 这个星期主要是看了三本书,先说说基本感想。 《手把手教你学 FPGA 设计》:巨好评 👍👍 作者果不其然是真·高手啊!况且现在敢入、能入电子工业和无线电的人大概是少数吧,当初进入已经非常了不起了,现在又来教下一辈,还是以这么通透的理解层次! 而且他还在华为海思半导体公司加入了新一代无线通讯技术(貌似是 4G 或以上?) 跳频 OFDM 无线多地址通讯系统的研发,他技术行文的简洁…
#Python 四舍五入能『优化“矢量化”后的预测结果准确率』一看可能不是正确答案,但是我会用实践测试一下它是不是正确的
首先看看这个 wiki 页面,我们提取 HTML 表格数据(下面的编程风格不值得学习,复用性也很差,是我自己瞎堆的,因为我不熟悉 JQuery,,,)
然后我们输出 CSV,上 Python Pandas + Sklearn 分析吧,首先我们已经确认,数据里没有特殊字符(和 CSV 语义冲突的)需要处理
复制下对象、注意去掉两边的
首先看看这个 wiki 页面,我们提取 HTML 表格数据(下面的编程风格不值得学习,复用性也很差,是我自己瞎堆的,因为我不熟悉 JQuery,,,)
let table = $('table.wikitable.sortable')
.filter((_, e) => e.firstElementChild.innerText === "费雪鸢尾花卉数据集").get(0);
let data_body = $(table).find('tbody').get(0);
//{ let result = [];
for (let t of data_body.children) {
let [x, y, z, w, o] = t.children;
result.push(...[x,y,z,w,o]);
}}
🙈 不好意思,这个是矢量化(删除线)let result = $(data_body.children).map((_, t) => [($(t.children).slice(0,2+1).map((_, c) => Number.parseFloat(c.innerText))).get().concat(t.children[4].innerText)])
;
刚才本来用的是 array expansion(其实有点 deficient)[...xs, a] 的,后来发现 JQuery 的 map 好像会自动 flatten... 就换成这样了slice 的 2+1 是因为 JQuery 的 slice 切片是右闭(exclusive)区间,2 是输出的最后一个 index然后我们输出 CSV,上 Python Pandas + Sklearn 分析吧,首先我们已经确认,数据里没有特殊字符(和 CSV 语义冲突的)需要处理
result.map((_, t) => t.join(',')).get().join("\n")
好的程序应该反映出其所处理的数据的结构,这里 map 里的闭包输出每个 row 的 toCsvString 操作结果(join each column);最后每行再合并(join)就生成了 CSV 结构复制下对象、注意去掉两边的
"" dquote,然后保存到本地Wikipedia
安德森鸢尾花卉数据集
安德森鸢尾花卉数据集(英文:Anderson's Iris data set),也称鸢尾花卉数据集(英文:Iris flower data set)或费雪鸢尾花卉数据集(英文:Fisher's Iris data set),是一种多重变量分析的数据集。它最初是埃德加·安德森从加拿大加斯帕半岛的鸢尾属花朵中提取的形態學变异数据 ,后由羅納德·費雪作为判別分析的一个例子,运用到统计学中。
duangsuse::Echo
#Python 四舍五入能『优化“矢量化”后的预测结果准确率』一看可能不是正确答案,但是我会用实践测试一下它是不是正确的 首先看看这个 wiki 页面,我们提取 HTML 表格数据(下面的编程风格不值得学习,复用性也很差,是我自己瞎堆的,因为我不熟悉 JQuery,,,) let table = $('table.wikitable.sortable') .filter((_, e) => e.firstElementChild.innerText === "费雪鸢尾花卉数据集").get(0);…
#ML #Python 接下来安装一点用于数据分析的东西
我们使用 Python 3,当然,要是有 IPython 和 Spyder 这种为数据分析 REPL 优化的东西就更好了,不过下面直接用 IPython3
现代机器学习算法主要包含概念学习、规则学习、基于解释学习、基于实例学习、遗传学习、强化学习、贝叶丝学习、神经网络、决策树等分类,当然我也不是很清楚都有啥大区别,反正就是数据分析就对了。
然后函数式编程一般有以下特征 #FP
+ 闭包、高阶函数、函数作为值
+ 基于 Lambda calculus、柯里化(currying)
+ 纯函数无副作用、引用透明、惰性求值
+ 模式匹配,递归作为程序控制基本方式
.... 跑题了,打住。
机器学习某度词条里说是
然后我现在”尤其“喜欢神经网络,不过很可惜还没有入门😑 不是因为神经网络复杂(一般我们手动会讨论的基本都是些小网络和网络结构什么的,然后还会讨论学习算法,神经元基本模型本身并不复杂)
在等待下载的时候可以先定义几个函数,首先我们要用
我可不擅长黑箱教学是̶因̶为̶话̶太̶多̶的̶缘̶故̶么̶
说起来这个教程居然还提到了 Python 有 Complex numbers(数学上的复数,包含实数和虚数单位)算是『惊喜』吗?
然后我们有了算法输入了(按照某学姐的说法,神经网络就是一个带有未知参数的程序,那机器学习的很多算法也差不多,这里是有仨输入仨未知系数一输出的数学函数,我们的学习算法会”猜“一个最优化的系数组)
那先按某个比率 k 切分学习数据和测试数据来的,定义函数
有点秀而且华而不实甚至有问题(跑)其实实践中不应该这么做,但是这里不是实践,所以推荐大家打开思路去实现算法
然后考虑一下最后的验证,测试预测准确率的函数
然后简单 play 一下,Python 表达起来也很方便
+ (书上的例子)Pip 已安装软件包
但是!在其他新兴的编程语言(比如 Kotlin)里!这些功能基本都是可以直接用面向对象多态重载、运算符重载、高阶函数定义出来的! 🤔
+ 简单的数据折线图(plot)
数据可视化!
和
pip3 install --user --compile -U pandas matplotlib sklearn
如果有权限你也可以去掉 --user flag,-U 的意思是如果有的话安装更新我们使用 Python 3,当然,要是有 IPython 和 Spyder 这种为数据分析 REPL 优化的东西就更好了,不过下面直接用 IPython3
现代机器学习算法主要包含概念学习、规则学习、基于解释学习、基于实例学习、遗传学习、强化学习、贝叶丝学习、神经网络、决策树等分类,当然我也不是很清楚都有啥大区别,反正就是数据分析就对了。
然后函数式编程一般有以下特征 #FP
+ 闭包、高阶函数、函数作为值
+ 基于 Lambda calculus、柯里化(currying)
+ 纯函数无副作用、引用透明、惰性求值
+ 模式匹配,递归作为程序控制基本方式
.... 跑题了,打住。
机器学习某度词条里说是
”机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。“
其实你记住,无非就是数学的统计、概率、函数、微积分,然后加上计算机科学的算法、软件工程什么的最多了,其他的我们这些渣渣也用不到。然后我现在”尤其“喜欢神经网络,不过很可惜还没有入门😑 不是因为神经网络复杂(一般我们手动会讨论的基本都是些小网络和网络结构什么的,然后还会讨论学习算法,神经元基本模型本身并不复杂)
在等待下载的时候可以先定义几个函数,首先我们要用
sklearn 里实现的 linear regression 学习实现我可不擅长黑箱教学是̶因̶为̶话̶太̶多̶的̶缘̶故̶么̶
说起来这个教程居然还提到了 Python 有 Complex numbers(数学上的复数,包含实数和虚数单位)算是『惊喜』吗?
然后我们有了算法输入了(按照某学姐的说法,神经网络就是一个带有未知参数的程序,那机器学习的很多算法也差不多,这里是有仨输入仨未知系数一输出的数学函数,我们的学习算法会”猜“一个最优化的系数组)
那先按某个比率 k 切分学习数据和测试数据来的,定义函数
splitTrainingTestData
from pandas import DataFrame
def splitTrainingTestData(ts: DataFrame, kratio: int = 60) -> (DataFrame, DataFrame):
assert kraito <= 100, "kratio must be valid integral percentage"... 刚才把
(txs, drs) = ts.values.tolist(), round(100 / kratio)
training = txs[::drs]; testset = [x for x in txs if x not in training]
return training, testset
kraito 放到 ts 前面去了,Haskell 写多了的结果... (柯里化)有点秀而且华而不实甚至有问题(跑)其实实践中不应该这么做,但是这里不是实践,所以推荐大家打开思路去实现算法
然后考虑一下最后的验证,测试预测准确率的函数
verifyRegressionAccuracy
当然,为了优雅性这时候可以给表格加上头(header)了,就是在它的第一行写上 x,y,z,w... 就是给数据列命名def verifyRegressionAccuracy(ts: DataFrame, emax: float = 0.1, npredict = 'predict', ntruth = 'real') -> float:总之就是先弄出 acceptable result 然后 len 取分数啦
predicteds, truths = ts[npredict], ts[ntruth]
acceptables = [t for (i, t) in enumerate(predicteds) if abs(t - truths[i]) <emax]
return len(acceptables) / len(predicteds)
然后简单 play 一下,Python 表达起来也很方便
+ (书上的例子)Pip 已安装软件包
from pandas import DataFrame隐隐约约会感受到 Python 的确是数据处理很方便,有不少遍历语法(slice 和复制的
from pkg_resources import working_set
import re
dists = [(d.project_name, d.version) for d in working_set]
pkgs = DataFrame()
pkgs['name'] = [n for (n, _) in dists]
pkgs['version'] = [v for (_, v) in dists]
pkgs.tail(5)
pkgs.sort_values('version').head(10)
pkgs.describe()
pkgs['version'].describe()
pkgs['version'].map(lambda v: int(re.sub('rc|dev|\.','', v))).astype(int)
[:] 下标、list comprehension [... for ... in ... if ...])但是!在其他新兴的编程语言(比如 Kotlin)里!这些功能基本都是可以直接用面向对象多态重载、运算符重载、高阶函数定义出来的! 🤔
+ 简单的数据折线图(plot)
from matplotlib import pyplot as plot然后一个简单的 sin
from pandas import Series
from math import sin
series, 很经典吧?xs = range(0,200, 3)很可惜没有使用 float 的 range... 也罢
ys = [sin(x) for x in xs]
但是数据不容易看见,谁对着那堆数字有感觉啊!数据可视化!
plot.style.available ... 看看可以有啥绘图风格plot.style.use('Solarize_Light2')
然后Series(ys).plot()
或者plot.plot(ys)
均可,之后可以选择 plot.show() (貌似没有用)和
plot.savefig('path.png')
—Wikipedia
線性回歸
一種迴歸分析
duangsuse::Echo
#ML #Python 接下来安装一点用于数据分析的东西 pip3 install --user --compile -U pandas matplotlib sklearn 如果有权限你也可以去掉 --user flag,-U 的意思是如果有的话安装更新 我们使用 Python 3,当然,要是有 IPython 和 Spyder 这种为数据分析 REPL 优化的东西就更好了,不过下面直接用 IPython3 现代机器学习算法主要包含概念学习、规则学习、基于解释学习、基于实例学习、遗传学习、强化学习…
然后可以开始了
先看看
In [39]:
mean 是平均值、std 是方差
min, max 肯定都知道
50% 是中位数,其他
In [40]:
不过有一个问题,就是 w 不是数值怎么量化,那我们就先看看按 0, 1, 2, ... 『文本
然后直接用 sklearn 的算法学习
In [50]:
from pandas import Series, read_csv然后我们就有了 Iris 数据集的工作实例(working set)(跑
iris = read_csv('Iris.csv', encoding='utf-8', parse_dates=[], index_col=False)
先看看
In [39]:
iris.describe()
Out[39]: x y zcount 是整个列表的求和
count 150.000000 150.000000 150.000000
mean 5.843333 3.057333 3.758000
std 0.828066 0.435866 1.765298
min 4.300000 2.000000 1.000000
25% 5.100000 2.800000 1.600000
50% 5.800000 3.000000 4.350000
75% 6.400000 3.300000 5.100000
max 7.900000 4.400000 6.900000
mean 是平均值、std 是方差
min, max 肯定都知道
50% 是中位数,其他
?% 依此类推In [40]:
iris['w'].value_counts()Out[40]:
versicolor 50In [43]:
virginica 50
setosa 50
Name: w, dtype: int64
iris.tail(5)Out[43]:
x y z w好了,已经说明问题了,现在我们要根据
145 6.7 3.0 5.2 virginica
146 6.3 2.5 5.0 virginica
147 6.5 3.0 5.2 virginica
148 6.2 3.4 5.4 virginica
149 5.9 3.0 5.1 virginica
f(x,y,z) 和它的结果 w 学习 f 这个曲线不过有一个问题,就是 w 不是数值怎么量化,那我们就先看看按 0, 1, 2, ... 『文本
矢量化』分会有怎么样的结果(怎么感觉和以前我把 Unification 当成泛化(Generalization) 的时候一样)iris['id'] = Series().astype(int)
def vectorize(w,i, cname='w', cid='id', iris=iris): iris.loc[iris[cname]== w, cid] = iIn [3]:
vectorize('setosa', 0)
In [4]: iris.head(5)
Out[4]: x y z w idOK, 这就是”矢“量化
0 5.1 3.5 1.4 setosa 0.0
1 4.9 3.0 1.4 setosa 0.0
2 4.7 3.2 1.3 setosa 0.0
3 4.6 3.1 1.5 setosa 0.0
4 5.0 3.6 1.4 setosa 0.0
vectorize('versicolor', 1)
vectorize('virginica', 2)
iris.to_csv('Iris_vectorized.csv', index=False)
print (open('Iris_vectorized.csv').read())
In [17]: iris['id'].value_counts()
Out[17]: 2.0 50然后进行数据预处理切分,之前的算法因为还有点偏差所以就不用了
1.0 50
0.0 50
Name: id, dtype: int64
from sklearn.model_selection import train_test_split切分数据
iris_ds = iris.copy()就不填
trainset, testset, trainsetid, testsetid = train_test_split(iris_ds, iris_ds['id'], train_size = 0.6)
del trainset['w']
trainset.describe()
trainsetid.describe()
random_state 了然后直接用 sklearn 的算法学习
from sklearn.linear_model import LinearRegression
from math import floor
lreg = LinearRegression()
lreg.fit(trainset, trainsetid)
我们刚才”学习“了这些数据,看看我们能得到什么:In [50]:
testset.head(3)
Out[50]: x y z w id预测一下(”下面“都是 numpy 高性能计算的,这还有一层封装... 不过 pandas 也够了)
91 6.1 3.0 4.6 versicolor 1.0
73 6.1 2.8 4.7 versicolor 1.0
79 5.7 2.6 3.5 versicolor 1.0
testset_truth = testset['w']—
del testset['w']
testset['predict'] = lreg.predict(testset)
然后手工看看结果value_map = {-1: 'setosa', 0: 'setosa', 1: 'versicolor', 2: 'virginica'}
testset['guess'] = testset['predict'].map(lambda x: value_map[floor(x)])
testset['w'] = testset_truth
🤔
duangsuse::Echo
然后可以开始了 from pandas import Series, read_csv iris = read_csv('Iris.csv', encoding='utf-8', parse_dates=[], index_col=False) 然后我们就有了 Iris 数据集的工作实例(working set)(跑 先看看 In [39]: iris.describe() Out[39]: x y z count 150.000000…
分类的准确性有点可怕...:
看来线性回归也... 😟 不过很可惜,
— Question: 同一个 linearreg,那原作者分类的准确率为啥那么低
因为我的『向量化』是 one-hot encoding (独热码编码)的啊!
如果我写完全等价的实践(1,2,3 + round),你猜准确率又是怎么样的?
首先我们的回归结果是转换为文字形式的,试试数值形式:
== 然后再试一次:
In [14]:
然后使用独到的 1,2,3,... 序列:
In [23]:
🥺 打脸了。好像完全可以算在误差内嘛...
— 实际情况
所谓打脸是因为我不知道作者要『
—
[1]: 后来发现,我在训练的时候忘记删掉了 id 参数... 它好像找到了一个作弊的方式 🤪
虽然比较辣鸡的算法显然也不能把 id 的系数提高到多少... 但是线性回归或许可以猜出来?
看来线性回归也... 😟 不过很可惜,
verifyRegressionAccuracy 只支持数值表项,看来只能另外写准确率判断了:errors = testset[testset['w'] != testset['guess']]
In [32]: len(errors) / len(testset) * 100
Out[32]: 8.333333333333332
8.3% 的错误率!— Question: 同一个 linearreg,那原作者分类的准确率为啥那么低
因为我的『向量化』是 one-hot encoding (独热码编码)的啊!
如果我写完全等价的实践(1,2,3 + round),你猜准确率又是怎么样的?
首先我们的回归结果是转换为文字形式的,试试数值形式:
from pandas import Series, read_csv—
iris = read_csv('Iris.csv', encoding='utf-8', parse_dates=[], index_col=False)
iris['id'] = Series().astype(int)
def vectorize(w,i, cname='w', cid='id', iris=iris): iris.loc[iris[cname]== w, cid] = i—
vectorize('setosa', 0); vectorize('versicolor', 1); vectorize('virginica', 2)
from sklearn.model_selection import train_test_split
iris_ds = iris.copy()
trainset, testset, trainsetid, testsetid = train_test_split(iris_ds, iris_ds['id'], train_size = 0.6)
del trainset['w'], trainset['id']
from sklearn.linear_model import LinearRegression—
from math import floor
lreg = LinearRegression()
lreg.fit(trainset, trainsetid)
testset_truthw, testset_truthid = testset['w'], testset['id']
del testset['w'], testset['id']
testset['predict'] = lreg.predict(testset)
testset['id'] = testset_truthid
from pandas import DataFrame
def verifyRegressionAccuracy(ts: DataFrame, emax: float = 0.1, npredict = 'predict', ntruth = 'real') -> float:
predicteds, truths = ts[npredict], ts[ntruth]
acceptables = [t for (r, t) in zip(truths, predicteds) if abs(t - r) <emax]
return (len(acceptables) / len(predicteds)) *100
verifyRegressionAccuracy(testset, 1.0, 'predict', 'id')结果是误差 100% 在 1.0 以内。[1]
== 然后再试一次:
vectorize('setosa', 1); vectorize('versicolor', 2); vectorize('virginica', 3)
iris_ds = iris.copy()
trainset, testset, trainsetid, testsetid = train_test_split(iris_ds, iris_ds['id'], train_size = 0.6)
del trainset['w'], trainset['id']— 修改后的逻辑
lreg = LinearRegression()
lreg.fit(trainset, trainsetid)
testset_truthw, testset_truthid = testset['w'], testset['id']
del testset['w'], testset['id']
testset['predict'] = lreg.predict(testset)
testset['id'] = testset_truthid
In [14]:
verifyRegressionAccuracy(testset, 1.0, 'predict', 'id')
Out[14]: 100.0
我们的依然是 100%,然后 0.1 的误差是 48%然后使用独到的 1,2,3,... 序列:
In [23]:
verifyRegressionAccuracy(testset, 1.0, 'predict', 'id')
Out[23]: 100.0 然后 0.1 的误差是 45%🥺 打脸了。好像完全可以算在误差内嘛...
— 实际情况
所谓打脸是因为我不知道作者要『
矢量回归』还 map 了一次 round
至于 round 之后的误差(即使 round 的结果和之前绝对值线性距离计算的也有很大关系...)... 嘻嘻 🌝testset['predict'] = testset['predict'].map(round)结果是 96%... 好像又是差不多,欸奇怪了 🤔 真实无解
verifyRegressionAccuracy(testset, 1, 'predict', 'id')
—
[1]: 后来发现,我在训练的时候忘记删掉了 id 参数... 它好像找到了一个作弊的方式 🤪
虽然比较辣鸡的算法显然也不能把 id 的系数提高到多少... 但是线性回归或许可以猜出来?
duangsuse::Echo
分类的准确性有点可怕...: 看来线性回归也... 😟 不过很可惜,verifyRegressionAccuracy 只支持数值表项,看来只能另外写准确率判断了: errors = testset[testset['w'] != testset['guess']] In [32]: len(errors) / len(testset) * 100 Out[32]: 8.333333333333332 8.3% 的错误率! — Question: 同一个 linearreg,那原作者分类的准确率为啥那么低…
This media is not supported in your browser
VIEW IN TELEGRAM
皮了一下午,那么就继续吧....
此书我寒假要找时间吐槽的,但是现在显然没有时间关心它
此书我已经看完了,剩下的内容也都已经阅读。
用 Sklearn 之类的框架做机器学习并不困难,只要你有点基础知识就可以,作者也说了,算法细节?呵呵
我们先用一个小数据集测试一下被抽象化的每个算法对预测的准确率,然后直接选好模型(虽然比较死,就是基于 Panda 数据表格的,差一点都不行,计算机视觉也不能搞)就开始上线... 然后... 就没有然后了
然后书本上面还有一些其他算法(比如 kNN)的例子,可以自己去 Sklearn 那里看,教程很详细,先溜了。
此书我寒假要找时间吐槽的,但是现在显然没有时间关心它
此书我已经看完了,剩下的内容也都已经阅读。
用 Sklearn 之类的框架做机器学习并不困难,只要你有点基础知识就可以,作者也说了,算法细节?呵呵
我们先用一个小数据集测试一下被抽象化的每个算法对预测的准确率,然后直接选好模型(虽然比较死,就是基于 Panda 数据表格的,差一点都不行,计算机视觉也不能搞)就开始上线... 然后... 就没有然后了
然后书本上面还有一些其他算法(比如 kNN)的例子,可以自己去 Sklearn 那里看,教程很详细,先溜了。
duangsuse::Echo
#ML #Python 接下来安装一点用于数据分析的东西 pip3 install --user --compile -U pandas matplotlib sklearn 如果有权限你也可以去掉 --user flag,-U 的意思是如果有的话安装更新 我们使用 Python 3,当然,要是有 IPython 和 Spyder 这种为数据分析 REPL 优化的东西就更好了,不过下面直接用 IPython3 现代机器学习算法主要包含概念学习、规则学习、基于解释学习、基于实例学习、遗传学习、强化学习…
还是 sin wave 之类的数据,
Pandas 的
只需要使用 EDSL(内部领域专属语言)操作它的实例就可以快速获得好看的数据图了,不需要不断去 plot 啊 add seris 再设置 xlabel ylabel 啊,都被良好封装(styles, chart type)了
上面本频道也有过 Ruby + GNUPlot 的版本
matplotlib 可以这么用:from math import sin, cos, tan
from numpy import arange, array
from matplotlib import pyplot
from pandas import DataFrame, Series
xs = arange(0, 100, 0.1)
sinys = [sin(x) for x in xs]
cosys = [cos(x) for x in xs]
tanys = [tan(x) for x in xs]
plot.style.use('Solarize_Light2')
DataFrame(array([[xs], [sinys], [cosys], [tanys]]), columns = 'x sin(x) cos(x) tan(x)'.split())... 不行def kv(name): return (name, globals()[name])
func_tab = DataFrame.from_items(dict(kv(xs), kv(sinys), kv(cosys), kv(tanys)))... 不行waves = DataFrame()
waves['x'] = xs
waves['sin(x)'] = sinys; waves['cos(x)'] = cosys; waves['tan(x)'] = tanys
waves.index.name = 'x'
waves.plot(title='Triangle waves')
就可以得到好看的折线图了,并且非常容易使用Pandas 的
DataFrame 就是字面意义上的数据框:一打可能有名字(index)的数据序列(pandas.Series)只需要使用 EDSL(内部领域专属语言)操作它的实例就可以快速获得好看的数据图了,不需要不断去 plot 啊 add seris 再设置 xlabel ylabel 啊,都被良好封装(styles, chart type)了
上面本频道也有过 Ruby + GNUPlot 的版本
Telegram
duangsuse::Echo
require 'gnuplot'
xs = []; ys = []
_dataset = r.map { |it| it['published'] }
ps = _dataset.sort_by { |d| d.day }.reverse.each { |k| xs << k.day; ys << _dataset.count { |it| it.day == k.day } }
Gnuplot.open do |p|
Gnuplot::Plot.new(p) do |plot|
plot.title…
xs = []; ys = []
_dataset = r.map { |it| it['published'] }
ps = _dataset.sort_by { |d| d.day }.reverse.each { |k| xs << k.day; ys << _dataset.count { |it| it.day == k.day } }
Gnuplot.open do |p|
Gnuplot::Plot.new(p) do |plot|
plot.title…
说到 tan,tanh 函数(双曲函数和三角函数有一定关系)因为其独特的性质也被人工神经网络当作激活函数。激活函数在神经元被传入信号的时候处理产生一个输出,继续正向传播。人工神经网络在回归的时候不需要运行激活函数,但是学习的时候必须运行激活函数。对于梯度下降学习算法来说,激活函数在其值域上必须是可导的,但是我不是很了解这些东西...
Forwarded from dnaugsuz
这里是
expression.getValueArgument(2)!!
这里是@TypedIntrinsic(IntrinsicType.WORKER_EXECUTE)
public fun <T1, T2> execute(mode: TransferMode, producer: () -> T1, @VolatileLambda job: (T1) -> T2): Future<T2>
所以我很奇怪为什么它会说if (irCallableReference?.getArguments().isNotEmpty() ?:false) context.reportCompilationError
显然有参数啊... 难不成 Lambda 的参数还不一样?还分隐式参数和显式参数?GitHub
JetBrains/kotlin-native
Kotlin/Native infrastructure. Contribute to JetBrains/kotlin-native development by creating an account on GitHub.
Konan 的 Interop 参数配置: #Kotlin
defFile pkg target
linkerOpts compilerOpts
headers includeDirs linkFiles
dumpParameters
这里可以看到更多
defFile pkg target
linkerOpts compilerOpts
headers includeDirs linkFiles
dumpParameters
这里可以看到更多
GitHub
JetBrains/kotlin-native
Kotlin/Native infrastructure. Contribute to JetBrains/kotlin-native development by creating an account on GitHub.
写完了,但是没有用,好像花了两个小时... 一部分时间是处理 Gradle build 的,熟悉插件,然后 Gradle 也不熟练,也就是能用一点 plugin configuration 和 sourceset.... 很菜的
duangsuse::Echo
https://github.com/Trumeet/Desktop #Kotlin 看起来比较简单,我也想默写一个(部分不默写,比如 bitflags) 这次我会用一点面向对象(Mixins)
好像没有使用 Mixin... 因为那个的确是比较麻烦(有可能还要用 CGLib 什么的)
然后这里也的确没啥东西需要 Mixin 的,何况那个抽象类的方法都是
Commit 明确了一下 parameter 和返回值的传递,都是没有用处的值
然后这里也的确没啥东西需要 Mixin 的,何况那个抽象类的方法都是
protected 的,从外面看也很像 Mixin 了Commit 明确了一下 parameter 和返回值的传递,都是没有用处的值
GitHub
App(Control): Specify block parameters · duangsuse/Essay-Kotlin-Secure-Desktop@aaadd7a
See also https://github.com/Trumeet/Desktop. Contribute to duangsuse/Essay-Kotlin-Secure-Desktop development by creating an account on GitHub.