Simple Machine Learning
一个简单的机器学习算法实现
环境和依赖库
- python3.5及以上
- windows or Linux
- numpy (数组)
- matplotlib (作图)
- scipy (求解优化问题)
- requests (用于在线数据集获取)
- cvxopt (支持向量机中的二次规划问题)
强烈推荐Anaconda环境
pip安装
pip install simple_male
对,是simple_ma(chine)le(arning)
,简单男人,因为simple_ml
已经在pypi上被人注册了喵
git安装
git clone https://github.com/Yangruipis/simple_ml.git
cd ./simple_ml
python setup.py install
# 一个简单的例子,用CART树进行二分类
from simple_ml.tree import CART
import numpy as np
X = np.array([[1,1.1],
[1,2.0],
[0,3.0],
[0,2.2]])
y = np.array([1,1,0,0])
cart = CART(min_samples_leaf=1)
cart.fit(X, y)
x_test = np.array([[1,2],[3,4]])
print(cart.predict(x_test))
Out[1]: np.array([1,1])
./simple_ml/examples
文件夹中提供了大多数方法的使用范例- 更详细的用法见帮助文档: https://yangruipis.github.io/simple_ml/
如果你同时满足:
- 机器学习入门阶段
- python 进阶阶段
那么恭喜你,这个项目可以给你提供如下帮助:
- 阅读源码, 不像sklearn过于复杂难读的源码,这个轻量级的项目非常易读,并且我尽可能的增加了注释,提高代码的可读性
- 学习知识,该项目梳理基本机器学习算法的种类和流程,工程实现上的大致步骤,中间出现的一些细节问题以及如何解决
- 实时交流,我在 gitter 上建立了 gitchat 聊天室,欢迎大家就项目本身的具体问题,或者其他任何相关事项进行讨论,欢迎大家积极提 issues,我会第一时间回复
simple_ml
提供了大量经典的机器学习数据集的获取接口DataCollector
,数据集来自UCI。
simple_ml
提供了常用的数据预处理方法,包括了编码、独热编码、缺失值处理、异常值处理以及随机数据集划分等。
同时,simple_ml
提供了PCA
降维方法以及针对高维数据的SuperPCA
降维方法。
simple_ml
提供了Filter和Embedded两种特征选择方法,包括了:
- 方差法
- 相关系数法
- 卡方检验法
- L1正则
- GBDT特征选择
simple_ml
提供了非常多的二分类方法,以wine数据集为例(见./simple_ml/examples
),分类效果和方法名称见图1。
图 1. 二分类效果图
simple_ml
暂时只提供了一些多分类算法,见下图,同样是wine数据集,后面作者将会进行补充。
图 2. 多分类效果图
simple_ml
提供了回归方法如下
MultiRegression
CART
GBDT
SVR
simple_ml
提供了K-means聚类
、层次聚类
、DBSCAN密度聚类
三种聚类方法
注:
以上所有图均为simple_ml直出(需要matplotlib)
包括了分类和回归作图、以及针对二分类、多分类、回归问题的评价指标计算,包括Precision, Recall等等
作者就读于上海某商科院校经济学,从大二开始接触数据挖掘,以及编程相关知识(stata->R->C#->python),对数据和编程非常感兴趣,基本上一路走过来全靠自学。作者希望可以用心做好一个项目,记录自己学习的轨迹,尤其是即将毕业之际。
在接下来的一年找工作的同时,作者将尽全力维护该项目,不断更新和修改,热烈欢迎任何贡献和讨论。
致谢:
- 首先感谢我自己,一路走来的不易如人饮水
- 其次感谢我的好友何燕杰和程刚对我在学习和工作上的帮助
- 最后感谢所有相关书籍、博客的作者,尤其感谢刘建平Pinard一丝不苟的机器学习博客,无论是知识还是态度,都令人肃然起敬
- 2018-04-20
- 加入BP神经网络算法
simple.neural_network
和相关的example - 更新github pages
- 加入BP神经网络算法
- 2018-04-23
- 加入
Stacking model
- 更新每个模型的new()函数
- 重写
BaseModel
的predict
和score
抽象方法,以检查测试集是否满足要求 - fix SuperPCA bugs
- 加入
- 2018-04-24
- 加入类:
Multi2binary
,继承该类的BaseClassifier
可以将多分类问题转为二分类问题 - 添加SVM, Logistic,NeuralNetwork, AdaBoost 的继承关系和多分类方法
- 增加相关的多分类例子,以及帮助文档
- 重写特征类型推断函数,根据多种线索进行推断
- 加入类:
- 2018-04-26
- 重写自动化模块
auto
,实现BaseAuto
抽象类以及数据自动预处理的AutoDataHandle
类 - 加入网格搜索方法
- 加入宫颈癌数据的完整处理Example
- 加入
helper
模块,用于格式化输出 - 加入
data_handle
模块的缺失值统计方法nan_summary
- 重写自动化模块
- 2018-04-27
- 加入自动特征选择类
AutoFeatureHandle
,以及对应的宫颈癌Example
- 加入自动特征选择类
- 2018-06-11
- 加入回归作图方法
- 2018-06-12
- 加入多元回归方法
MultiRegression
并测试 MultiRegression
中加入加权回归方法
- 加入多元回归方法
- 2018-06-13
- 重写支持向量机
SVM
,调用优化库进行求解,而不是手写SMO - 加入支持向量回归
SVR
- 整个支持向量相关算法,包括了
Kernel
类,BaseSupportVector
类以及SVM
,SVR
- 重写支持向量机
- 2018-06-20
- 添加相关测试用例
- 2018-06-23
- 添加
optimal
模块,包括了爬山法和模拟退火法进行最小值求解 - pypi发布,版本
0.1.2
- 添加
- 2018-08-01
- 添加
DBSCAN
聚类方法 - 添加
DBSCAN
相关例子
- 添加
- test cases
- an efficient bp network
- more optimal methods
- train test split func in helper
- other feature select method to add
- lasso and Ridge
- add GBDT feature select
- update Readme
- setup.py
- examples
- get more datasets
- regression plot
- more regression method
- kd_tree
- Support Machine Regression
- more metrics
- github pages, especially the class map
- stacking
- 二分类转多分类器
- recognize nan and inf
- check x before predict, check x and y before score
- "self.new()" function in each model
- 支持向量相关算法测试和文档撰写
- pypi发布
- 移除logistic.py 中对scipy的依赖,自己写fmin(),以及实现底层优化算法
- LSTM
- DBSCAN cluster
- auto data handle
- auto feature select
- auto param select
- auto model select