关于自定义kNN算法的构造函数
来源:4-2 scikit-learn中的机器学习算法封装

shurima阿慕慕
2020-03-08
老师好,在我们自己写的kNN算法中__ini__的参数只定义了k的值,但函数内部把另两个“私有变量”初始化为None,按我的理解进行实例化时构造函数应该是最先被调用的,为什么这两个私有变量不先放在构造函数的参数中呢?
写回答
1回答
-
在这里,我遵守的是 sklearn 的机器学习算法类的设计方式,即:
构造函数只做算法初始化;
训练过程叫做 fit,才会对用户传来的 X_train 和 y_train 处理;
预测过程叫 predict。
后面你就会看到,我们设计的所有机器学习的算法类都将遵守这一模式,并且 sklearn 的所有机器学习算法类也都遵守这一模式。
具体为什么这么设计,这是一个设计问题。所谓设计问题,就是没有对错,只有合适不合适。
sklearn 采用这样的设计方式,是将模型的参数(比如 kNN 中的 k)和数据集解耦。换句话说,我们创建的是一个 k 为 3 的 kNN 算法类,后续,用户可以在这个算法类中,传入任意的 X_train 和 y_train,更换 X_train 和 y_train;
而不是创建了一个 k 为 3,并且只能计算某一组 X_train 和 y_train 的算法类。
继续加油!:)
132020-09-13
相似问题