Python中如何分享自己实现的一些机器学习算法

自学机器学习算法也有六个月了,也累积不少代码了,发出来供初学者参考,要是能有大佬批评指正一下最好了。
代码注释都是中文的,还有一些补充说明。注释和部分命名借鉴了 sklearn,极少量的实现思路参考了 sklearn/libsvm 源码。
由于个人能力有限,性能上表现得不太令人满意,训练示例中有很多地方和 sklearn 做了对比,性能上平均差距在 30 倍左右,有些地方代码还写得很累赘,待自己水平提高后会再重写以前的实现的。

ide: anaconda3(64bit)(python3.6)

使用到的类库:
主要 numpy, pandas, matlibplot
少量 scipy, numba

目前已实现的算法和能处理的问题类型
回归:线性回归,逻辑回归 -> 回归,多分类
决策树:ID3,C4.5,CART -> 多分类,多分类,多分类 /回归
集成学习:随机森林,adaboost,GBDT -> 多分类 /回归,多分类 /回归,多分类 /回归
支持向量机(线性核 /多项式核 /径向基核) -> 多分类 /回归
朴素贝叶斯 -> 多分类
(还有一个孤立森林,用于处理离群点的,但是很早之前写的了,很不完善,忽视掉吧)

用于分类的多层感知器已经写好了,但还在进一步学习和研磨,所以还要一阵子才会上传。
(为了加速运算,折腾了一阵子 cuda,但没收到预期的效果,只能暂时放弃了,太憋屈了)

链接:
https://github.com/jiedawang/machine-learning-python
Python中如何分享自己实现的一些机器学习算法


3 回复

要分享自己实现的机器学习算法,最规范的方式是打包成Python包并发布到PyPI。这里给你一个完整的最小示例:

1. 创建项目结构:

my_ml_algo/
├── my_ml_algo/
│   ├── __init__.py
│   └── algorithms.py
├── tests/
├── README.md
├── setup.py
└── requirements.txt

2. 核心代码文件 algorithms.py

import numpy as np
from sklearn.base import BaseEstimator, ClassifierMixin

class MyCustomClassifier(BaseEstimator, ClassifierMixin):
    """一个自定义分类器示例"""
    
    def __init__(self, learning_rate=0.01, n_iterations=1000):
        self.learning_rate = learning_rate
        self.n_iterations = n_iterations
        self.weights = None
        self.bias = None
    
    def fit(self, X, y):
        n_samples, n_features = X.shape
        self.weights = np.zeros(n_features)
        self.bias = 0
        
        # 简单的梯度下降训练
        for _ in range(self.n_iterations):
            linear_model = np.dot(X, self.weights) + self.bias
            predictions = self._sigmoid(linear_model)
            
            dw = (1/n_samples) * np.dot(X.T, (predictions - y))
            db = (1/n_samples) * np.sum(predictions - y)
            
            self.weights -= self.learning_rate * dw
            self.bias -= self.learning_rate * db
        
        return self
    
    def predict(self, X):
        linear_model = np.dot(X, self.weights) + self.bias
        predictions = self._sigmoid(linear_model)
        return [1 if i > 0.5 else 0 for i in predictions]
    
    def _sigmoid(self, x):
        return 1 / (1 + np.exp(-x))

3. __init__.py 文件:

from .algorithms import MyCustomClassifier

__version__ = "0.1.0"
__all__ = ["MyCustomClassifier"]

4. setup.py 配置文件:

from setuptools import setup, find_packages

setup(
    name="my-ml-algo",
    version="0.1.0",
    author="Your Name",
    description="My custom machine learning algorithms",
    packages=find_packages(),
    install_requires=[
        "numpy>=1.19.0",
        "scikit-learn>=0.24.0"
    ],
    python_requires=">=3.7",
)

5. 本地安装测试:

pip install -e .

6. 发布到PyPI:

# 先安装构建工具
pip install build twine

# 构建包
python -m build

# 上传到PyPI
twine upload dist/*

使用示例:

from my_ml_algo import MyCustomClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

X, y = make_classification(n_samples=1000, n_features=20)
X_train, X_test, y_train, y_test = train_test_split(X, y)

clf = MyCustomClassifier(learning_rate=0.01, n_iterations=1000)
clf.fit(X_train, y_train)
predictions = clf.predict(X_test)

分享建议: 记得写好文档和示例,方便别人使用。


多层感知器上传了,包含算法的完整实现,调用示例,可视化探究,学习笔记,以及一个 pyqt 写的演示小程序。
提供 sigmoid/tanh/ReLU/softmax 四种激活函数,均方误差 /交叉熵 /对数似然三种代价函数,分类和回归均支持。
另外提供 mnist/cifar10 数据集管理工具,不提供数据集,请自行下载。

新增聚类算法:k-means, dbscan, 凝聚式层次聚类
新增推荐算法:协同过滤

回到顶部