采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师好,在我们自己写的kNN算法中__ini__的参数只定义了k的值,但函数内部把另两个“私有变量”初始化为None,按我的理解进行实例化时构造函数应该是最先被调用的,为什么这两个私有变量不先放在构造函数的参数中呢?
在这里,我遵守的是 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 的算法类。
继续加油!:)
明白了!谢谢老师
看到老师这个回答竟有一丝心动的感觉,老师你啥时候也开一门和设计相关的课程,这方面我相信很多人都欠缺。或者老师,你觉得怎样提升这方面的设计能力,有没有什么学习路线或者相关的资料推荐?最近我学 Python 的时候,学到装饰器那块就有点蒙逼了,真是看不太懂,高级的知识点感觉不是仅仅懂整个程序的执行流程就能明白的。
装饰器属于高阶函数,可能看函数式编程有意义。具体设计,如果真要说理论,就是设计模式那一套,但其实实践最重要,多看优秀的开源框架或者类库的设计方式。其实,学习一个框架的过程,不仅仅是在学习怎么使用它,也是在学习它的设计方式。继续加油!:)
登录后可查看更多问答,登录/注册
Python3+sklearn,兼顾原理、算法底层实现和框架使用。
2.5k 19
3.4k 17
2.9k 15
1.6k 15
1.4k 14