sklearn库的学习

sklearn库的学习sklearn入门,sklearn库结构

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一个方面。其实最好的教程就是官方文档(http://scikit-learn.org/stable/),但是官方文档讲述的太过于详细,同时很多人对官方文档的理解和结构认识上都不能很好的把握。我写这篇文章的目的是想用一篇文章讲清楚整个sklearn库,我会讲清楚怎么样用这个库,而不是讲清楚每一个知识点。(授人以鱼不如授人以渔)(本文很多都是从实践的角度出发,也仅仅只代表我个人的认识)
本篇文章主要从两个方面出发:1,介绍sklearn官方文档的类容和结构;2,从机器学习重要步骤出发讲清楚sklearn的使用方法。

一、sklearn官方文档的类容和结构
1,机器学习的认识:从实践的角度出发,机器学学习要做的工作就是在我们有的一个数据集上建立一个或者多个模型,然后对我们的模型进行优化和评估。我们将会在sklearn中看到下图各个模块到底是什么,怎么用。
这里写图片描述

2,sklearn库官方文档结构:
下图表示:官方文档有很多模块:
tutorials:是一个官方教程,可以理解快速上手教程,但是看完感觉并没有很快。
user guide(用户指南):这里对每一个算法有详细的介绍
API:这里是库调用的方法
FAQ:常见问题
contributing:贡献,还介绍最新的一些代码,功能。
(下面三个就跟没有用了)
这里写图片描述
总结:一般的做法是API里面找到你要调用的方法,然后可以查看方法参数的情况和使用情况。也可以在指南里面找到具体的解释。

3,sklearn库的结构:
这里写图片描述
(1)结构:
由图中,可以看到库的算法主要有四类:分类,回归,聚类,降维。其中:

  • 常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees
  • 常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN
  • 常用降维:LinearDiscriminantAnalysis、PCA

(2)图片中隐含的操作流程:
这个流程图代表:蓝色圆圈内是判断条件,绿色方框内是可以选择的算法。你可以根据自己的数据特征和任务目标去找到一条自己的操作路线,一步步做就好了。

二、机器学习主要步骤中sklearn应用
1,数据集:面对自己的任务肯定有自己的数据集,但是对于学习来说,sklearn提供了一些数据,主要有两部分:现在网上一些常用的数据集,可以通过方法加载;另一种sklearn可以生成数据,可以生成你设定的数据。(设定规模,噪声等)
这里写图片描述

下面是一段python实例:

from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

#使用以后的数据集进行线性回归(这里是波士顿房价数据)
loaded_data=datasets.load_boston()
data_X=loaded_data.data
data_y=loaded_data.target

model=LinearRegression()
model.fit(data_X,data_y)

print(model.predict(data_X[:4,:]))
print(data_y[:4])

#使用生成线性回归的数据集,最后的数据集结果用散点图表示
X,y=datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=10)   #n_samples表示样本数目,n_features特征的数目 n_tragets noise噪音
plt.scatter(X,y)
plt.show()

2,数据预处理:数据预处理包括:降维、数据归一化、特征提取和特征转换(one-hot)等,这在sklearn里面有很多方法,具体查看api。这里用归一化(preprocessing.scale() )例子解释一下:

from sklearn import preprocessing #进行标准化数据时,需要引入个包
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.datasets.samples_generator import  make_classification
from sklearn.svm import SVC
import matplotlib.pyplot as plt


X,y=make_classification(n_samples=300,n_features=2,n_redundant=0,n_informative=2,random_state=22,n_clusters_per_class=1,scale=100)

#X=preprocessing.minmax_scale(X,feature_range=(-1,1))
X=preprocessing.scale(X)   #0.966666666667 没有 0.477777777778
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)
clf=SVC()
clf.fit(X_train,y_train)
print(clf.score(X_test,y_test))


plt.scatter(X[:,0],X[:,1],c=y)
plt.show()

a=np.array([[10,2.7,3.6],
            [-100,5,-2],
            [120,20,40]],dtype=np.float64)   #每一列代表一个属性
print(a)       #标准化之前a     
print(preprocessing.scale(a)) #标准化之后的a 

3,选择模型并训练: sklearn里面有很多的机器学习方法,可以查看api找到你需要的方法,sklearn统一了所有模型调用的api,使用起来还是比较简单。

from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

#使用以后的数据集进行线性回归
loaded_data=datasets.load_boston()
data_X=loaded_data.data
data_y=loaded_data.target

model=LinearRegression()
model.fit(data_X,data_y)

print(model.predict(data_X[:4,:]))
print(data_y[:4])

#参数
print(model.coef_)      #如果y=0.1x+0.3 则此行输出的结果为0.1
print(model.intercept_)             #此行输出的结果为0.3
print(model.get_params())       #模型定义时定义的参数,如果没有定义则返回默认值
print(model.score(data_X,data_y))   #给训练模型打分,注意用在LinearR中使用R^2 conefficient of determination打分

4,模型评分:
(1)模型的score方法:最简单的模型评估方法是调用模型自己的方法:

    #预测
    y_predict = knnClf.predict(x_test)
    print("score on the testdata:",knnClf.score(x_test,y_test))

(2)sklearn的指标函数:库提供的一些计算方法,常用的有classification_report方法
这里写图片描述

下面是一个svm分类器,是关于图片分类的,具体数据这里没有给出,大家只需要关注模型的评估就好。

def svmClassify(x_train, x_test, y_train, y_test):
    id = range(1, x_test.shape[0]+1)
    print("start run svm!")
    #训练
    svc = svm.SVC(kernel='rbf', C=10,probability=True)
    svc.fit(x_train, y_train)
    #预测
    y_predict = svc.predict(x_test)
    print("svm mode's score on the test data:",svc.score(x_test,y_test))
    print("svm mode's evaluate:",classification_report(y_test,y_predict))
    # print(svc.coef_) # 如果y=0.1x+0.3 则此行输出的结果为0.1
    # print(svc.intercept_) # 此行输出的结果为0.3
    print(svc.get_params())  # 模型定义时定义的参数,如果没有定义则返回默认值

    #可能性计算
    probablity = svc.predict_proba(x_test)
    list_pro = []
    for i in range(probablity.shape[0]):
        pro = max(list(probablity[i]))
        list_pro.append(pro)
    #输出
    index = np.array(id).reshape(-1,1)
    result = pd.DataFrame(np.column_stack((np.array(id).reshape(-1, 1), np.array(y_test).reshape(-1, 1),np.array(y_predict).reshape(-1,1),np.array(list_pro).reshape(-1,1))),
                          columns=['ImageId','test_label','predict_lable','probablity'])

    result.to_csv("result/svm_result.csv", index=False, header=True, encoding='gbk')

    diff_index = []
    for i in range(result.shape[0]):
        # print(result['test_label'][i], result['predict_lable'][i],)
        diff_index.append(result['test_label'][i] != result['predict_lable'][i])
    print(diff_index)
    diff = result[diff_index]
    diff_x = x_test_original[diff_index]

    diff.to_csv('result/svm_result_diff.csv', index=False, header=True, encoding='gbk')
    # 查看每个错误
    for i in range(len(diff_index)):
        # print("label is:",diff['test_label'][i],"predict is:",diff['predict_lable'][i])
        print("test label is :", diff.iloc[i]['test_label'], 'predict label is :', diff.iloc[i]['predict_lable'])
        x = diff_x[i]
        img = x.reshape(28, 28)
        image_show(img)

(3)sklearn也支持自己开发评价方法

5,模型的保存于恢复:模型的保存与恢复可以采用python的pickle,也可以用joblib的方法。

from sklearn import svm
from sklearn import datasets

clf=svm.SVC()
iris=datasets.load_iris()
X,y=iris.data,iris.target
clf.fit(X,y)

#method1:pickle
import pickle
#save
with open('save/clf.pickle','wb')as f:
    pickle.dump(clf,f)

#restore
with open('save/clf.pickle','rb') as f:
    clf=pickle.load(f)
    print(clf.predict(X[0:1]))


#method2:joblib
from sklearn.externals import joblib
#save
joblib.dump(clf,'save/clf.pkl')
clf3=joblib.load('save/clf.pkl')
print(clf3.predict(X[0:1]))

这是一篇入门的文章,希望入门的人有一个很好的引导,接下来我也会跟新一些重要的内容。下一篇,我打算讲解交叉验证这个很重要的模块。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180624.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SOAP 和WSDL 是什么关系?

    SOAP 和WSDL 是什么关系?最近在学XML,还有ORACLE的ERP,有两个概念学习了一下: SOAP(SimpleObjectAccessProtocol)简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encod

    2022年7月24日
    8
  • android IPC 通信(上)-sharedUserId&&Messenger「建议收藏」

    android IPC 通信(上)-sharedUserId&&Messenger

    2022年2月23日
    46
  • python自动补全设置_python代码补全

    python自动补全设置_python代码补全Hello,大家好,我是橘子呀~前几期橘子给大家介绍了Python是什么以及如何安装Python软件。也分享了如何系统的以及高效率的去学习Python这门课程,还有一些避雷建议,今天橘子就分享给大伙一点宝藏干货!!!藏不住的东西,不如扬了它!请大家把它收入囊中~不要辜负我的一片苦心~一、Pycharm常用快捷键(Windows)Ctrl+Q快速查看文档Ctrl+鼠标左键简介及代码定义…

    2022年8月26日
    5
  • java解析url的链接和参数_java根据url下载图片

    java解析url的链接和参数_java根据url下载图片方法一Blob和FileReader对象实现原理:使用xhr请求图片,并设置返回的文件类型为Blob对象[xhr.responseType=“blob”],使用FileReader对象接收blob。getBase64(“https://fastmarket.oss-cn-shenzhen.aliyuncs.com/oss/static/other/1/images/baseMap_index.jpg”)//链接是你的网络图片functiongetBase64(imgUrl){

    2022年9月2日
    0
  • pycharm的git_pycharm版本控制

    pycharm的git_pycharm版本控制1、createpatchcreatepatch打补丁,当连接不上git服务器时,可以先本地打补丁,生成一个文件,里面记录了文件变更信息,后面可以随时提交至git服务器2、checkoutrevisioncheckoutrevision检出版本,可以回退到任意版本,右边会显示当前检出版本与上一版本的变化3、newbranchnewbranch建立新的分…

    2022年8月29日
    0
  • linux 内核驱动–Platform Device和Platform_driver注册过程[通俗易懂]

    linux 内核驱动–Platform Device和Platform_driver注册过程[通俗易懂]

    转自网络,自己学习用
     
    从Linux2.6起引入了一套新的驱动管理和注册机制:Platform_device和Platform_driver。
    Linux中大部分的设备驱动,都可以使用这套机制, 设备用Platform_device表示,驱动用Platform_driver进行注册。

    Linuxplatformdriver机制和传统的devicedriver 机制(通过driver_register函数进行注册

    2022年7月24日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号