duangsuse::Echo
714 subscribers
4.24K photos
127 videos
583 files
6.46K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
咳咳.... 马上继续写书去算了( #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 等高性能计算库的使用(“黑箱”教学),但是提了名字

算法没有讲太多算法细节,只是给你几个封装函数做学习、测试数据切分 (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)比如一个 strcharhomogenous 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]:第一次的时候搞错了... 物理上那个是向量,基本无关的东西
duangsuse::Echo
咳咳.... 马上继续写书去算了( #Java 真的是时间永远不够用 看起来我打算加入的章节,这次恐怕都没有时间加入了呢。 这个星期主要是看了三本书,先说说基本感想。 《手把手教你学 FPGA 设计》:巨好评 👍👍 作者果不其然是真·高手啊!况且现在敢入、能入电子工业和无线电的人大概是少数吧,当初进入已经非常了不起了,现在又来教下一辈,还是以这么通透的理解层次! 而且他还在华为海思半导体公司加入了新一代无线通讯技术(貌似是 4G 或以上?) 跳频 OFDM 无线多地址通讯系统的研发,他技术行文的简洁…
#Python 四舍五入能『优化“矢量化”后的预测结果准确率』一看可能不是正确答案,但是我会用实践测试一下它是不是正确的

首先看看这个 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... 就换成这样了
slice2+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,然后保存到本地
Iris.csv
3 KB
#ML #Python Iris 数据集
duangsuse::Echo
#Python 四舍五入能『优化“矢量化”后的预测结果准确率』一看可能不是正确答案,但是我会用实践测试一下它是不是正确的 首先看看这个 wiki 页面,我们提取 HTML 表格数据(下面的编程风格不值得学习,复用性也很差,是我自己瞎堆的,因为我不熟悉 JQuery,,,) let table = $('table.wikitable.sortable') .filter((_, e) => e.firstElementChild.innerText === "费雪鸢尾花卉数据集").get(0);…
#ML #Python 接下来安装一点用于数据分析的东西

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:
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)

总之就是先弄出 acceptable result 然后 len 取分数啦
然后简单 play 一下,Python 表达起来也很方便

+ (书上的例子)Pip 已安装软件包

from pandas import DataFrame
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)

隐隐约约会感受到 Python 的确是数据处理很方便,有不少遍历语法(slice 和复制的 [:] 下标、list comprehension [... for ... in ... if ...]
但是!在其他新兴的编程语言(比如 Kotlin)里!这些功能基本都是可以直接用面向对象多态重载、运算符重载、高阶函数定义出来的! 🤔

+ 简单的数据折线图(plot)

from matplotlib import pyplot as plot
from pandas import Series
from math import sin

然后一个简单的 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')


duangsuse::Echo
#ML #Python 接下来安装一点用于数据分析的东西 pip3 install --user --compile -U pandas matplotlib sklearn 如果有权限你也可以去掉 --user flag,-U 的意思是如果有的话安装更新 我们使用 Python 3,当然,要是有 IPython 和 Spyder 这种为数据分析 REPL 优化的东西就更好了,不过下面直接用 IPython3 现代机器学习算法主要包含概念学习、规则学习、基于解释学习、基于实例学习、遗传学习、强化学习…
然后可以开始了

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 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

count 是整个列表的求和
mean 是平均值、std 是方差
min, max 肯定都知道
50% 是中位数,其他 ?% 依此类推
In [40]:
iris['w'].value_counts()
Out[40]:
versicolor    50
virginica 50
setosa 50
Name: w, dtype: int64

In [43]:
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] = i

In [3]: vectorize('setosa', 0)

In [4]: iris.head(5)
Out[4]:
     x    y    z       w   id
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)

OK, 这就是”矢“量化
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
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

预测一下(”下面“都是 numpy 高性能计算的,这还有一层封装... 不过 pandas 也够了)

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…
分类的准确性有点可怕...:

看来线性回归也... 😟 不过很可惜,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)
verifyRegressionAccuracy(testset, 1, 'predict', 'id')

结果是 96%... 好像又是差不多,欸奇怪了 🤔 真实无解

[1]: 后来发现,我在训练的时候忘记删掉了 id 参数... 它好像找到了一个作弊的方式 🤪
虽然比较辣鸡的算法显然也不能把 id 的系数提高到多少... 但是线性回归或许可以猜出来?
皮了一下午,那么就继续吧....
此书我寒假要找时间吐槽的,但是现在显然没有时间关心它
此书我已经看完了,剩下的内容也都已经阅读。

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 之类的数据,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 的版本
说到 tan,tanh 函数(双曲函数和三角函数有一定关系)因为其独特的性质也被人工神经网络当作激活函数。激活函数在神经元被传入信号的时候处理产生一个输出,继续正向传播。人工神经网络在回归的时候不需要运行激活函数,但是学习的时候必须运行激活函数。对于梯度下降学习算法来说,激活函数在其值域上必须是可导的,但是我不是很了解这些东西...
#Kotlin 求大佬解答
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 的参数还不一样?还分隐式参数和显式参数?
Konan 的 Interop 参数配置: #Kotlin

defFile pkg target

linkerOpts compilerOpts

headers includeDirs linkFiles

dumpParameters

这里可以看到更多
写完了,但是没有用,好像花了两个小时... 一部分时间是处理 Gradle build 的,熟悉插件,然后 Gradle 也不熟练,也就是能用一点 plugin configuration 和 sourceset.... 很菜的
这里直接 identity(null) 是因为 Secured 抽象类已经处理好了这部分状态不需要再去关心
duangsuse::Echo
https://github.com/Trumeet/Desktop #Kotlin 看起来比较简单,我也想默写一个(部分不默写,比如 bitflags) 这次我会用一点面向对象(Mixins)
好像没有使用 Mixin... 因为那个的确是比较麻烦(有可能还要用 CGLib 什么的)
然后这里也的确没啥东西需要 Mixin 的,何况那个抽象类的方法都是 protected 的,从外面看也很像 Mixin 了

Commit 明确了一下 parameter 和返回值的传递,都是没有用处的值