zoukankan      html  css  js  c++  java
  • [AI]关于SkLearn 及其 性能问题

    Scikit-Learn 使用

    Scikit-Learn (sklearn) 把很多学习模型抽象好 'NB', 'KNN', 'LR', 'RF', 'DT', 'SVM', 'GBDT',可以通过统一接口返回model对象,然后对它进行fit,predict等操作。

    Scikit-Learn Sample

    训练学习:

    # Multinomial Naive Bayes Classifier
    def naive_bayes_classifier(train_x, train_y):
        from sklearn.naive_bayes import MultinomialNB
        model = MultinomialNB(alpha=0.01)
        model.fit(train_x, train_y)
        return model
    
    # KNN Classifier
    def knn_classifier(train_x, train_y):
        from sklearn.neighbors import KNeighborsClassifier
        model = KNeighborsClassifier()
        model.fit(train_x, train_y)
        return model
    
    # Logistic Regression Classifier
    def logistic_regression_classifier(train_x, train_y):
        from sklearn.linear_model import LogisticRegression
        model = LogisticRegression(penalty='l2')
        model.fit(train_x, train_y)
        return model
    
    # 其他模型也是类似方式: 'NB', 'KNN', 'LR', 'RF', 'DT', 'SVM', 'GBDT'
    
    

    预测:

    predict = model.predict(test_x)
    accuracy = metrics.accuracy_score(test_y, predict)
    

    sklearn 性能问题

    跟tensorflow,darknet等库不同,sklearn/numpy 缺省只使用CPU计算并且不支持并行。
    自己写程序通过多线程支持并行计算,有以下两个优化:

    GIL (Global Interpreter Lock 全局解释器锁)

    虽然有两个死循环的线程,而且有两个物理 CPU 内核,但因为 GIL 的限制,两个线程只是做着分时切换,总的 CPU 占用率还略低于 50%。
    虽然 CPython 的线程库封装了操作系统的原生线程,但却因为 GIL 的存在导致多线程不能利用多个 CPU 内核的计算能力。好在现在 Python 有了multiprocessing,C 语言扩展机制 和 ctypes,足以应付多核时代的挑战。

    GIL 与 Python 线程的纠葛

    MKL(Intel® Math Kernel Library)

    Numpy/Scipy可以使用MKL库提升计算性能
    Numpy+MKL Performance

    Numpy+MKL不能使用pip3直接安装,可以在下面的地址下载离线安装包。
    Numpy+MKL安装地址

    sklearn

  • 相关阅读:
    iPhone开发指南应用程序核心
    id,SEL,Nil,nil,IMP,Method,Class类型
    需求驱动赢得创新
    Linux内核list&hlist解读
    转载:x86的cpu_relax解析
    hadoop开发者第三期
    Hadoop开发者入门专刊
    Hadoop源代码eclipse编译指南
    高效的使用stl::map和std::set
    配置VIM语法高亮及自动缩进
  • 原文地址:https://www.cnblogs.com/herryzz/p/10237163.html
Copyright © 2011-2022 走看看