机器学习(Python)--sklearn库相关内容

一、简介

为了能够更好的学习文本挖掘相关的内容,本人准备对机器学习、深度学习等等相关内容都进行一定的了解。今天的内容是关于机器学习中sklearn库的一些介绍和用法。
相应的,由于网上的一些内容实在是不咋的,所以本人诚挚推荐大家参照sklearn库的官方文档进行学习。但是官方文档中的内容对于没有入门的小白来说理解起来还是有一些难度的。

二、sklearn是什么?

2.1、sklearn简介

sklearn其实是scikit-learn的简称,是一个功能十分强大的Python机器学习库,是Scipy的扩展,建立在Numpymatplolib库的基础上。利用这几大模块的优势,可以大大的提高机器学习的效率。
sklearn中包含了四大类机器学习的方法:分类、回归、降维、聚类。包括了特征提取、数据处理、模型评估三大模块。

2.2、sklearn的官方文档

首先我们需要了解一个定义,那就是什么样的机器具有学习能力?
比较拗口的、官方的定义就是:针对经验E和一系列的任务T和一定表现的衡量P,如果随着经验E的积累,针对定义好的任务T可以提高表现P,就说明机器具有学习能力。
说的简单点,通常的机器的工作都是由我们人对其进行设定的,是比较死板的,是不会自己自主的做一些事情的。假如我们的机器可以通过运行程序来积累经验,不断提高自己的准确率,那就意味着我们的机器具有学习能力。
举一个例子,我们在高中时的概率题会经常遇到线性回归的题目,这类题目需要我们计算出最终的函数式,然后通过我们计算来的函数式来预测。假如我们的机器也可以做到这个功能呢?它可以通过数据得到一个函数式并且实现预测,那它不就是具有学习的功能了吗?

2.3、sklearn的官方文档结构


由图中,可以看到库的算法主要有四类:分类,回归,聚类,降维。其中:

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

这个流程图代表:蓝色圆圈是判断条件,绿色方框是可以选择的算法,我们可以根据自己的数据特征和任务目标去找一条自己的操作路线。

三、快速上手

传统的机器学习的任务从开始到建模的一般流程是:获取数据——》数据预处理——》训练模型——》模型评估——》预测。
我们在很多博文中都可以看到,在介绍机器学习入门时都是以鸢尾花的识别来进行的。鸢尾花的数据就包括在sklearn这个库中,可以直接调用。
在官方文档中,鸢尾花的介绍如下:在这里插入图片描述

3.1、思路即代码实现

首先、我们需要明确我们需要完成的任务:通过已有的数据训练出模型,并且通过该模型来识别鸢尾花的种类。
我们人类想要分辨出鸢尾花的种类又该怎么做呢?特征,我们可以通过鸢尾花不同品种的特征来识别,在我们的数据中给出的鸢尾花的特征数据是:花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width);我们将他们称为特征变量;我们将四个特征放在一起就可以得到鸢尾花的品种:山鸢尾(iris-setosa)、变色鸢尾(iris-versicolor)和维吉尼亚鸢尾(iris-virginica),这个结果我们称为目标值。

# 鸢尾花有四个特征值,可以通过这四个特征分辨出其品种
# 数据集中的data中包含的是特征值
# target中包含的是目标值
# 我们需要做的就是训练处模型将data中数据和target中的数据相关联,
# 并且通过该模型来预测

# 自带的数据集都在这里
from sklearn import datasets
# 将数据集分为测试集和训练集
from sklearn.model_selection import train_test_split
# 临近点方式训练数据
from sklearn.neighbors import KNeighborsClassifier

# 加载鸢尾花数据,包含四个特征变量
iris = datasets.load_iris()
# 特征变量
iris_X = iris.data
# print(iris_X)
print('特征变量的长度', len(iris_X))
# 目标值
iris_y = iris.target
# print('鸢尾花的目标值', iris_y)

# 通过train_test_split进行训练集和测试集进行分开,测试集占30%,并且这个函数是进行随机分配的
X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)
# print(y_train)

# 训练数据
# 引入训练方法
knn = KNeighborsClassifier()
# 填充数据
knn.fit(X_train, y_train)
params = knn.get_params()
# print(params)

score = knn.score(X_test, y_test)
print("预测得分为:%s" % score)

# 预测数据,预测特征值
print(knn.predict(X_test))
print(y_test)

3.2、代码解读
# 将数据集分为测试集和训练集
from sklearn.model_selection import train_test_split

train_test_split就是用来对我们的数据集进行分割的,因为我们在进行实验时,需要用来训练出模型的训练集也需要对该模型进行测试的测试集

# 临近点方式训练数据
from sklearn.neighbors import KNeighborsClassifier

我们所使用的训练数据的方法是临近点方式KNeighborsClassifier
我们可以通过keys属性查看iris数据的相关内容。
如下:

from sklearn import datasets

iris = datasets.load_iris()`在这里插入代码片`
print(iris.keys())

输出结果:

dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names', 'filename'])

data中保存的是特征变量,target中保存的则是结果值

# 通过train_test_split进行训练集和测试集进行分开,测试集占30%,并且这个函数是进行随机分配的
X_train, X_test, y_train, y_test = train_test_split(iris_X, iris_y, test_size=0.3)

通过train_test_split将数据分为训练集和测试集,测试集占30%。

score = knn.score(X_test, y_test)
print("预测得分为:%s" % score)

我们通过这个打分函数可以判断,我们的模型的准确度。

# 预测数据,预测特征值
print(knn.predict(X_test))
print(y_test)

在最后,我们将测试集中的特征变量放入模型中进行预测(knn.predict(X_test))并且与实际的测试集(y_test)中的目标值分别打印出来进行人为对比,查看两组数据是否相同。

四、附数字识别代码

sklearn中不止有鸢尾花的数据,同时还有手写数字的数据,我们依旧可以通过分类的方法来对其他的手写数据进行识别。关于数据的详细内容请读者自行参考官网。本人将代码放在下面,使用的分类方法与上诉的鸢尾花的分类方法相同,只是修改了数据。

# 加载手写数字数据集
from sklearn.datasets import load_digits

# import matplotlib.pyplot as plt

digits = load_digits()
# print(digits.data.shape)
# '''
# (1797, 64)
# 表示的是有1797行数据,每行有64个数据
# 每行数据是image中每个数据的展开
# '''
# print(digits.target.shape)
# '''
# (1797,)
# 表示有1797个相对应的结果
# '''
# print(digits.images.shape)
# '''
# (1797, 8, 8)
# '''
# plt.matshow(digits.images[0])
# plt.show()

from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split

digits_X = digits.data
digits_y = digits.target
# print('特征变量的长度',len(digits_X))
X_train, X_test, y_train, y_test = train_test_split(digits_X, digits_y, test_size=0.3)

knn = KNeighborsClassifier()
knn.fit(X_train, y_train)
# print(knn.get_params())
print('打分:%s' % knn.score(X_test, y_test))
print(knn.predict(X_test))
print(y_test)

五、结尾

欢迎大家访问个人博客:http://101.132.119.152/

参考资料:
https://www.cnblogs.com/wj-1314/p/10179741.html
https://scikit-learn.org/stable/datasets/#toy-datasets

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值