从头开始机器学习

关于

从头开始使用 Python 实现一些基本的机器学习模型和算法。

该项目的目的不是产生尽可能优化且计算效率高的算法,而是以透明且易于理解的方式呈现它们的内部工作原理。

目录

安装

$ git clone https://github.com/eriklindernoren/ML-From-Scratch $ cd ML-From-Scratch $ python setup.py install

例子

多项式回归

$ python mlfromscratch/examples/polynomial_regression.py

图:正则化多项式回归模型拟合的训练进度
2016 年在瑞典林雪平测量的温度数据。

使用 CNN 进行分类

$ python mlfromscratch/examples/convolutional_neural_network.py +---------+ |卷积网络 | +---------+ 输入形状:(1, 8, 8) +---------------------+----- -------+--------------+ |图层类型|参数|输出形状 | +----------------------+------------+------------- -+ |二维卷积 | 160 | 160 (16,8,8)| |激活(ReLU)| 0 | (16,8,8)| |辍学| 0 | (16,8,8)| |批量归一化 | 2048 | 2048 (16,8,8)| |二维卷积 | 4640 | 4640 (32, 8, 8) | |激活(ReLU)| 0 | (32, 8, 8) | |辍学| 0 | (32, 8, 8) | |批量归一化 | 4096 | (32, 8, 8) | |压扁| 0 | (2048,)| |密集 | 524544 | (256,)| |激活(ReLU)| 0 | (256,)| |辍学| 0 | (256,)| |批量归一化 | 512 | 512 (256,)| |密集 | 2570 | 2570 (10,)| |激活(Softmax)| 0 | (10,)| +----------------------+------------+------------- -+ 总参数:538570 训练:100% [---------------------------------------------------- ---------------------------------] 时间:0:01:55 准确度:0.987465181058

图:使用 CNN 对数字数据集进行分类。

基于密度的聚类

$ python mlfromscratch/examples/dbscan.py

图:使用 DBSCAN 对卫星数据集进行聚类。

生成手写数字

$ python mlfromscratch/unsupervised_learning/generative_adversarial_network.py +------------+ |发电机| +------------+ 输入形状:(100,) +------------------------+---- --------+--------------+ |图层类型 |参数|输出形状 | +------------------------+------------+------------ ---+ |密集| 25856 | 25856 (256,)| |激活(LeakyReLU)| 0 | (256,)| |批量归一化 | 512 | 512 (256,)| |密集| 131584 | 131584 (512,)| |激活(LeakyReLU)| 0 | (512,)| |批量归一化 | 1024 | 1024 (512,)| |密集| 525312 | (1024,)| |激活(LeakyReLU)| 0 | (1024,)| |批量归一化 | 2048 | 2048 (1024,)| |密集| 803600 | (784,)| |激活 (TanH) | 0 | (784,)| +------------------------+------------+------------ ---+ 参数总数:1489936 +----------------+ |鉴别器| +-------------+ 输入形状:(784,) +------------------------+ ------------+--------------+ |图层类型|参数|输出形状 | +------------------------+------------+------------ ---+ |密集| 401920 | (512,)| |激活(LeakyReLU)| 0 | (512,)| |辍学| 0 | (512,)| |密集 | 131328 | (256,)| |激活(LeakyReLU)| 0 | (256,)| |辍学| 0 | (256,)| |密集| 514 | 514 (2,) | |激活(Softmax)| 0 | (2,) | +------------------------+------------+------------ ----+ 总参数:533762

图:生成对抗网络的训练进度
手写数字。

深度强化学习

$ python mlfromscratch/examples/deep_q_network.py +----------------+ |深Q网络| +----------------+ 输入形状:(4,) +--------------------+---- --------+--------------+ |图层类型|参数|输出形状 | +--------------------+------------------------+--------------+ |密集 | 320 | 320 (64,) | |激活(ReLU)| 0 | (64,) | |密集 | 130 | 130 (2,) | +--------------------+------------------------+--------------+ 总计参数:450

图:OpenAI 健身房中 CartPole-v1 环境的 Deep Q-Network 解决方案。

使用 RBM 进行图像重建

$ python mlfromscratch/examples/restricted_boltzmann_machine.py

图:显示网络在重建训练期间如何变得更好
MNIST 数据集中的数字 2。

进化进化神经网络

$ python mlfromscratch/examples/neuroevolution.py +---------------+ |型号总结| +-------------+ 输入形状:(64,) +------------------------+-- ----------+--------------+ |图层类型 |参数|输出形状 | +----------------------+------------+------------- -+ |密集 | 1040 | 1040 (16,)| |激活(ReLU)| 0 | (16,)| |密集| 170 | 170 (10,)| |激活(Softmax)| 0 | (10,)| +----------------------+------------+------------- -+ 总参数:1210 种群规模:100 世代:3000 突变率:0.01 [0 最佳个体 - 适应度:3.08301,准确度:10.5%] [1 最佳个体 - 适应度:3.08746,准确度:12.0%] ... [2999最佳个人 - 健康度:94.08513,准确度:98.5%] 测试集准确度:96.7%

图:神经网络对数字数据集的分类
已经进化进化了。

遗传算法

$ python mlfromscratch/examples/genic_algorithm.py +--------+ | GA | +--------+ 描述:遗传算法的实现,旨在产生用户指定的目标字符串。此实现根据候选者与目标之间的字母距离来计算每个候选者的适应度。候选人被选为父母的概率与候选人的适应度成正比。繁殖是通过父母对之间的单点交叉来实现的。变异是通过以均匀概率随机分配新字符来完成的。参数 ---------- 目标字符串:'遗传算法' 群体大小:100 突变率:0.05 [0 最接近的候选者:'CJqlJguPlqzvpoJmb',适应度:0.00] [1 最接近的候选者:'MCxZxdr nlfiwwGEk',适应度:0.01] [2 最接近的候选者:'MCxZxdm nlfiwwGcx',适合度:0.01] [3 最接近的候选者:'SmdsAklMHn kBIwKn',适合度:0.01] [4 最接近的候选者:'lotneaJOasWfu Z',适合度:0.01] ... [292最接近的候选者:'GeneticaAlgorithm',适合度:1.00] [293 最接近的候选者:'GeneticaAlgorithm',适合度:1.00] [294 答案:'遗传算法']

关联分析

$ python mlfromscratch/examples/apriori.py +------------+ |先验| +-------------+ 最低支持度:0.25 最低置信度:0.8 交易:[1, 2, 3, 4] [1, 2, 4] [1, 2] [2, 3 , 4] [2, 3] [3, 4] [2, 4] 频繁项集:[1, 2, 3, 4, [1, 2], [1, 4], [2, 3], [2 , 4], [3, 4], [1, 2, 4], [2, 3, 4]] 规则:1 -> 2(支持度:0.43,置信度:1.0) 4 -> 2(支持度:0.57,置信度: 0.8) [1, 4] -> 2 (支持度: 0.29, 置信度: 1.0)

实施

监督学习

无监督学习

强化学习

深度学习

  • 层数
    • 激活层
    • 平均池化层
    • 批量归一化层
    • 恒定填充层
    • 卷积层
    • 漏失层
    • 展平层
    • 全连接(密集)层
    • 全连接 RNN 层
    • 最大池化层
    • 重塑图层
    • 上采样层
    • 零填充层
  • 型号类型

接触

如果您想在此处看到一些实现,或者您只是想进行社交,请随时给我发电子邮件或在 LinkedIn 上与我联系。