[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

转载于:https://www.cnblogs.com/herryzz/p/10237163.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值