文章目录
- 利用sklearn进行鸢尾花分类
- preheat
- 联库
- 版本查询
- practice
- summary
利用sklearn进行鸢尾花分类
preheat
联库
sklearn是基于Numpy和Scipy的机器学习库,在利用sklearn进行实际应用时常会和以下的几个库联合使用
- Numpy:是Python中用于科学计算的基础包之一。在sklearn中,numpy数组是基本的数据结构(类似的有DataFrame),numpy的核心功能是ndarray类,即多维数组/张量,注意:scikit-learn的输入数据必须为numpy数组/二维数组
- Scipy:是Python中用于科学计算的函数集合。在实际编写代码时,常用scipy中的sparse模块,该模块可以给出稀疏矩阵(eg:可用于保存一个大部分元素为0的二维数组)
- matplotlib/pandas:关于pandas的使用可参考学习Datawhale的pandas教程joyful-pandas
## 以下的code有两部分可学习 1.将数据转换成ndarray类 2.熟悉print的格式化输出字符串
import numpy as np
x = np.array([[1,2,3],[4,5,6]])
print("x:{}".format(x))
#--------------------------------------------------------------------------------#
from scipy import sparse
## 创建一个二维数组,主对角线为1,其余为0
eye = np.eye(4) #函数中的n代表数组的维度
print("numpy array:\n{}".format(eye))
## 将numpy数组转化为CSR格式的scipy稀疏矩阵(::关于csr格式参考杂记文件夹中的一篇博客)
## 只保存非零元素
sparse_matrix = sparse.csr_matrix(eye)
print("\n scipy sparse csr matrix:\n{}".format(sparse_matrix))
format格式化参考文章
稀疏矩阵的存储方式
版本查询
import sys
print("Python version:{}".format(sys.version))
import pandas as pd
print("Pandas version:{}".format(pd.__version__))
import numpy as np
print("Numpy version:{}".format(np.__version__))
import scipy as sp
print("Scipy version:{}".format(sp.__version__))
import IPython
print("IPython version:{}".format(IPython.__version__))
import sklearn
print("scikit-learn:{}".format(sklearn.__version__))
practice
鸢尾花数据集(Iris)作为一个经典分类数据集被内嵌在sklearn.datasets模块中,该数据集包含两个Numpy数组:一个包含数据,在sklearn中被称为X;一个包含正确的输出/期望输出,被称为y。数组X是特征的二维数组,每个数据点对应一行,每个特征对应一列。数组y是一维数组,里面包含类别标签,对每个样本都是一个0-2之间的整数(经过特征工程处理),下面通过code来进行演示。
Step 1: 数据初窥探
## 利用scikit-learn开始鸢尾花分类项目
## 鸢尾花数据集作为一个经典的数据集被内嵌在scikit-learn库中的datasets模块中,可以使用load_iris函数来加载该数据集
## load_iris返回的是一个Bunch对象,类似于字典,里面包含键和值
from sklearn.datasets import load_iris
iris_dataset = load_iris()
print("Key of iris_dataset:\n{}".format(iris_dataset.keys())) #这里的键也可理解成datafrmae结构中的列名
## DESCR(descr)键对应的值是数据集的简要说明
# print(iris_dataset['DESCR'])
## target_names键对应的值是一个字符串数组,里面包含我们要预测的花的品种
print("Target names:{}".format(iris_dataset['target_names']))
## feature_names 键对应的值是一个字符串列表,对每个特征进行说明
print("Feature_names:\n{}".format(iris_dataset['feature_names']))
## 查看数据类型
print("Type of data:\n{}".format(type(iris_dataset['data']))) #data数组的每一行对应一朵花,列代表每朵花的四个测量数据
## 查看数据形状
print("Shape of data:\n{}".format(iris_dataset['data'].shape)) #属性shape,函数type
Step 2: 数据划分
## 划分训练集与测试集
## 常使用sklearn库下的model_selection模块的trian_test_split函数,使用该函数可以打乱数据集并进行拆分,由经验,常使用25%的数据作为测试集
## 在sklearn中常使用X表示数据(数据通常是二维矩阵),y表示标签(目标常是一个一维向量)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(iris_dataset['data'],iris_dataset['target'],random_state=0)
Step 3: 观察
## 观察数据
## 在构建机器学习模型之前,需要检查数据,而检查数据的最佳方式之一是将数据可视化
## 在此处,我们绘制散点图矩阵(由多个散点图组成的矩阵),首先需要将数组转化为DataFrame,利用scatter_matrix函数
# 利用X_train中的数据创建DataFrame
# 利用iris_dataset.feature_names中的字符串对数据进行标记
iris_dataframe = pd.DataFrame(X_train,columns=iris_dataset.feature_names)
# 利用DataFrame创建散点矩阵图,按y_train着色
grr = pd.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',hist_kwds={'bins':20},s=70,alpha=0.8)
# 矩阵的对角线是每个特征的直方图
scatter_matrix函数参数详解
Step 4: 训练
## 构建模型(k近邻算法)
## sklearn中所有的机器学习模型都在各自的类中实现,这些类被称为estimator类,k近邻算法是在neighbors模块下的KNeighborsClassifier类中实现的
## 使用sklearn库中的模型首先需要将类实例化为一个对象(面向对象编程),设置函数参数,其中k近邻算法的estimator类最重要的参数为邻居的数目
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=1)
## 面向对象编程,想要基于训练集来构建模型,需要调用knn对象的fit方法,输入参数为X_train和y_train,二者均为numpy数组
knn.fit(X_train,y_train)
sklearn中的大多数模型都有很多的参数,但是多用于速度优化或者非常特殊的用途。事实上,很多参数我们不必关注,而对于n_neighbors参数这类重要参数(knn模型的重要参数)需要引起注意
Step 5: 预测
## 预测
## 调用knn对象的predict方法来进行预测
X_new = np.array([[5,2.9,1,0.2]])
prediction = knn.predict(X_new)
print("Prediction :{}".format(prediction))
print("Predicted target name:{}".format(iris_dataset['target_names'][prediction]))
Step 6: 评估
## 评估模型
y_pred = knn.predict(X_test)
print("Test set predictions:\n{}".format(y_pred))
print("Test set score:{:.2f}".format(knn.score(X_test,y_test)))
summary
在鸢尾花分类中使用knn算法。该算法在KNeighborsClassifier类中实现,里面包含构造模型的算法,也包含利用模型进行训练的算法。我们将类实例化,并设定参数。然后调用fit方法来训练模型,传入训练数据(X_train)和标签数据(y_train)作为参数。使用predict进行预测,传入X。使用socre方法来评估模型。以上三种方法是sklearn监督模型中常用的接口,需掌握。对于鸢尾花的分类当然不止knn一种算法,其实也有诸如逻辑回归,神经网络等算法。