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)
上一篇 2022年10月18日 下午2:36
下一篇 2022年10月18日 下午2:46


相关推荐

  • vim设置汇总

    vim设置汇总vim配置文件:/etc/vimrc显示行号setnumber设置yaml文件换行对齐autocmdFileTypeyamlsetlocalaits=2sw=2et设置tab键为4个空格setts=4setexpandtab换行保持和前一行一样的缩进setautoindent

    2026年4月19日
    5
  • 与fo论禅汇总

    与fo论禅汇总与佛论禅网络上现在共包含三个版本 与佛论禅 与佛论禅与佛论禅重制版 与佛论禅重制版 Takuron 新与佛论禅 新约佛论禅 佛曰加密 PcMoe 有几个注意点 1 别拿百度引擎 翻墙拿谷歌 2 三个网站的使用逻辑不同 加密解密的输入框不一样 有的你得将密文写在下面的框里才能解密 有的是加密解密用通一个输入框 很坑

    2026年3月16日
    2
  • 华为裁员风波,网络一片骂声!然而,没人懂华为的无奈「建议收藏」

    华为裁员风波,网络一片骂声!然而,没人懂华为的无奈「建议收藏」毫无疑问,今天各大媒体的头条都是华为裁员。任正非&华为《任正非:华为不奋斗就垮了,不可能养不奋斗者!》一文在朋友圈刷屏,各微信群都能看到这篇文章的身影,而今日头条等各新闻客户端的首页推荐、科技等频道充斥着“华为裁员”字眼的标题。网友对此的反映也基本一致——怒斥华为对老臣子的不公对待,压榨员工。网友的抨击然而,大部分人都没看到华为的无奈

    2022年7月18日
    45
  • 【工具和环境】Linux下安装pycharm

    【工具和环境】Linux下安装pycharmLinux下安装pycharm一、下载pycharm安装包二、解压、安装和运行pycharm三、创建桌面快捷方式一、下载pycharm安装包下载网址:官网安装包下载链接(点击即可直接下载):2020.02.03二、解压、安装和运行pycharm解压命令:tarzxfpychrm-community-2020.2.3.tar.gz进入解压后的文件夹下的bin文件夹:cdpychrm-community-2020.2.3运行:shpycahrm.sh整个过程见下图:(说明:解压

    2022年8月28日
    7
  • 进程与线程

    进程与线程进程我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之

    2022年7月1日
    26
  • route-map的原理及简单应用「建议收藏」

    route-map的原理及简单应用「建议收藏」route-map(路由策略)

    2022年7月1日
    29

发表回复

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

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