/ML-numpy

机器学习算法numpy实现

Primary LanguageJupyter NotebookMIT LicenseMIT

仿照“sklearn"的API格式,自己写了一个小型的”sklearn“。

基本用法

# 模型训练
clf.fit(X_train,y_train)
# 模型预测
clf.predict(X)
# 测试集score
clf.score(X_test,y_test)

算法列表

算法 代码实现 博客
KNN 排序法实现:knn.py
KDTree实现: KDTree.ipynb
KNN原理及代码实现——以irs为例
KDTree实现KNN算法
PLA 详见pla.py 感知机原理及代码实现
Logistic Regression 详见lr.py 逻辑回归算法原理以及代码实现
Decision Tree ID3实现: MyDecisionTree.ipynb
C4.5实现: C4.5DecisionTree.ipynb
Cart实现: CART-DT.ipynb
决策树算法原理以及ID3算法代码实现
决策树算法原理以及cart代码实现
Naive Bayes mybayes.ipynb 朴素贝叶斯原理以及代码实现
SVM 采用cvxopt工具求解: SVC.ipynb svm.py
SMO算法实现:SMO.ipynb
支持向量机原理以及代码实现
支持向量机SMO代码实现
MLP 支持自定层数,自定义损失函数等特性:mlp 多层感知机及代码实现
Adaboost 元模型为某个特征上”切一刀“,详见 myAdaboost.ipynb Adaboost原理以及代码实现
CNN cnn.py
Linear Regression 详见 linear regression 线性回归原理以及代码实现
PCA 详见 PCA PCA算法以及代码实现

一些例子

breast-cancer数据集

def create_clfs():
    clfs = {
        "pla":PLA(),
        "lr":LogisticRegression(),
        "knn":KNNclassifier(5),
        "bayes":Bayes(),
        "cartdt":CartDT(),
        "adaboost":MyAdaboost(100),
        "svm-linear":SVM(kind="linear"),
        "svm-gaussian":SVM(kind="gaussian")
    }
    return clfs
clfs = create_clfs()
results = {"name":[],"train-score":[],"test-score":[]}
for name,clf in clfs.items():
    # logistic—regression 的 label 是 0和1,其余都是-1和1
    (train_y,test_y) = (y_train,y_test) if name in ["lr","bayes"] else (y_train_neg,y_test_neg)
    clf.fit(X_train,train_y)
    train_score = clf.score(X_train,train_y)
    test_score = clf.score(X_test,test_y)
    results["name"].append(name)
    results["train-score"].append(train_score)
    results["test-score"].append(test_score)
    print(f"{name}-{train_score:.2f}-{test_score:.2f}")

结果

image-20211216220606457

详见: summary-test.ipynb

二维数据模型效果可视化

image-20211216220606457

image-20211216220606457

详见:summary-test.ipynb