机器学习算法实现
仓库地址
MachineLearningImpl
这里是一些经典机器学习算法的实现。实现基于C++或者python基本库(python使用numpy和pandas,不使用任何机器学习框架),初学学习之用。
当前更新:
ANN
朴素bayes
CART决策树
ID3决策树
随机森林
kNN
Kmeans
SVM
ANN(基于C++)
https://github.com/Kalzncc/SimpleANNModel
朴素bayes(基于C++)
https://github.com/Kalzncc/SimpleBayesClassifier
ID3决策树和kNN算法
https://github.com/Kalzncc/ID3AndKNNImpl
CART决策树
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from random_forest.model.decision_tree import Decision_Tree model = Decision_Tree(gini_threshold=0.01 , rf_atr_num=-1 ) model.train(data, label, dtype) out_label = model.query(sample)
随机森林
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from random_forest.model.random_forest import Random_Forest model = Random_Forest(tree_num=10 , random_atr_num=3 , batch=100 , gini_threshold=0.3 ) model.train(data=data, label=label, dtype=dtype) out_label = model.query(sample)
Kmeans算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 from model.kmeans import Kmeansfrom utils.draw import draw_scatterfrom model.kmeans import get_data_div model = Kmeans(k=4 ) bel, means = model.train(data) draw_scatter(get_data_div(bel, data, 4 ), means)
这里演示聚簇示例
SVM 基于SMO算法
公式推定:https://kalzncc.github.io/2022/11/19/smo/
这里吐槽一下,这个东西是真的难啊。一度想要放弃,不过最后还是推出来并实现出来了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 from model.support_vector_machine import Support_Vector_Machinefrom utils.utils import read_dataimport model.kernel_func as kffrom utils.draw import draw_div_line svm = Support_Vector_Machine(max_round, delta_alpha_threshold, c, kkt_tolerance, kernel_func) svm.train(data, label) out_f = svm.query(sample) label = np.array([-1 if i == 0 else 1 for i in label]) draw_div_line(data, label, min_x=-5 , max_x=15 , min_y=-5 , max_y=15 , query=svm.query, sv=svm.sv)
有关核函数,在model.kernel_func.py 有示例,核函数需要定义run方法,传入两个等维度numpy向量,输出一个标量值。这里示例创建一个sigma为1.0的高斯核函数。 1 2 3 4 5 6 7 8 9 10 11 from svm.model.kernel_func import Gauss_Kernel svm = Support_Vector_Machine(max_round=10 , kernel_func=Gauss_Kernel(sigma=1.0 ))class Gauss_Kernel : def __init__ (self, sigma ): self.sigma = sigma def run (self, x, y ): return math.exp(-sum ((x - y) * (x - y)) / (2 * self.sigma * self.sigma))
下面是示例,这里带有红色x的样本是支持向量
本文作者: Kalzn
本文链接: http://kalzncc.github.io/2022/12/10/ML-impl/
版权声明: 除文章中特别注明外,本站所有文章采用
CC BY 3.0 CN 协议进行许可
即在署明文章作者及来源的情况下,您可以将本文用于包括商业目在内的任何用途。
除此之外,本文不做正确性担保,本人不对产生的问题负责。