首页 > 分享 > 基于scikit

基于scikit

        本章节分为详情介绍、信息扩展、完整代码、引用四部分。若需要直接使用代码运行,请直接跳转完整代码部分

 一  详情介绍

1  scikit-learn库介绍

        中文官网地址:scikit-learn中文社区

        英文官网地址:scikit-learn英文社区

        scikit-learn(也称sklearn)是一个基于Numpy,SciPy和matplotlib的开源机器学习库,提供分类,回归,聚类,降维,模型选择和预处理等算法。

图1 scikit-learn中文社区图

2  鸢尾花数据集讲解

        鸢尾花数据集最初由Edgar Anderson 测量得到,而后在著名的统计学家和生物学家R.A Fisher于1936年发表的文章「The use of multiple measurements in taxonomic problems」中被使用,用其作为线性判别分析(Linear Discriminant Analysis)的一个例子,证明分类的统计方法,从此而被众人所知,尤其是在机器学习这个领域。

图2 鸢尾花种类


        在scikit-learn库中自带有鸢尾花数据集。鸢尾花数据集共收集了三类鸢尾花(如 图2 所示),即Setosa鸢尾花、Versicolour鸢尾花和Virginica鸢尾花。

        详情如 表1 所示,每一类鸢尾花收集了50条样本记录,共计150条。数据集包括4个特征和1个标签。特征分别为花萼的长、花萼的宽、花瓣的长和花瓣的宽。三类鸢尾花分别以0,1,2指代。

表1 鸢尾花数据集 实例数150(三类各50个)数据4个特征+1个标签(类别)特征信息 花萼长度(厘米):sepal length (cm)花萼宽度(厘米):sepal width (cm)花瓣长度(厘米):petal length (cm)花瓣宽度(厘米):petal width (cm)标签信息 Setosa鸢尾花(0):setosaVersicolour鸢尾花(1):versicolorVirginica鸢尾花(2):virginica空缺值无

更详细信息地址:scikit-learn中文社区:数据讲解 

                             scikit-learn英文社区:数据讲解

3  K近邻算法

        K近邻算法(k-nearest neighbor classification,KNN),是有监督算法的一种。分为分类和回归两类。这儿只讲解K近邻分类。

3.1  基础讲解

        中心思想:若一个样本在特征空间中的 k 个最相似的样本大多数属于某一个类别,则该样本也属于这个类别。

        相似主要以距离计算作为比较标准。常见的距离计算方式有曼哈顿距离、欧式距离和切比雪夫距离三种,详情见(机器学习中的数学——距离)

        曼哈顿距离:

        欧式距离:

        切比雪夫距离:

3.2  K近邻分类流程  计算预测样本到每一个训练样本的距离;   将训练样本根据距离大小升序排列; 取出距离最近的K个训练样本; 进行多数表决,统计K个样本中哪个类别的样本个数最多; 将预测的样本归属到出现次数最多的类别。 3.3  K值的选择

K值过小:用较小领域中的训练实例进行预测。

容易受到异常点的影响;K值得减小就意味着整体模型变得复杂,容易发生过拟合。

K值过大:用较大领域中得训练实例进行预测。

受到岩本均衡得问题;且K值的增大就意味着整体的模型变简单,容易发生欠拟合。

K值调优:原理都是人为设定不同的K值(人为设定的参数,称为超参数),一个一个测试,选择最优情况。

交叉验证:是划分数据集的一种方法,目的就是为了得到更加准确可信的模型评分。网格搜索:网格搜索是模型调参的有力工具。寻找最优超参数的工具。

scikit-learn的KNN分类算法详情:scikit-learn中文社区:KNN分类       

                                                      scikit-learn英文社区:KNN分类

4  编程流程与API介绍

4.1  编程流程

4.2  API介绍 表2 scikit-learn的API介绍 API名作用sklearn.datasets数据集:通过load_iris()方法获取鸢尾花数据集sklearn.model_selection模型选择:通过train_test_split()方法切分数据集为训练集和验证集合;通过GridSearchCV()方法实现交叉验证与网格搜索功能sklearn.preprocessing预处理和规范化:通过StandardScaler()类,实现标准化sklearn.neighbors最近邻:通过KNeighborsClassifier()类,实现K近邻模型实例化详情:scikit-learn中文社区:API 参考

5  代码详解

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import GridSearchCV

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

5.1  导入数据集

iris_data = load_iris()

5.2  数据基本处理

查看数据集

print(iris_data.keys())

print(iris_data.data)

print(iris_data.target)

print(iris_data.feature_names)

print(iris_data.target_names)

数据可视化

iris_df = pd.DataFrame(iris_data.data,columns=iris_data.feature_names)

iris_df['label'] = iris_data.target

x_name = 'petal width (cm)'

y_name = 'sepal width (cm)'

sns.lmplot(x=x_name,y=y_name,data=iris_df,hue='label',fit_reg=False)

plt.xlabel(x_name)

plt.ylabel(y_name)

plt.title('Iris')

plt.show()

结果如图所示

图3 可视化结果图

数据集划分

x_train,x_test,y_train,y_test = train_test_split(iris_data.data,iris_data.target,test_size=0.2,random_state=2)

5.3  特征工程:标准化

train_stand = StandardScaler()

x_train = train_stand.fit_transform(x_train)

x_test = train_stand.transform(x_test)

5.4  模型训练

knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(x_train,y_train)

5.5  模型评估

test_score = knn.score(x_test,y_test)

print('模型评估分:',test_score)

5.6  新样本预测

new_sample = [[6.3,5,3,6]]

new_sample = train_stand.transform(new_sample)

new_sample_predict = knn.predict(new_sample)

print(f'样本预测结果为{new_sample_predict},即为{iris_data.target_names[2]}')

5.7  交叉验证+网格搜索

knn = KNeighborsClassifier(n_neighbors=3)

knn = GridSearchCV(knn,param_grid={'n_neighbors': [3, 5, 7, 9, 11]}, cv=5)

knn.fit(x_train, y_train)

best_score = knn.best_score_

best_model = knn.best_estimator_

best_params = knn.best_params_

all_results = knn.cv_results_

print(best_score)

print(best_model)

print(best_params)

print(all_results)

mydata = pd.DataFrame(all_results)

mydata.to_csv('./mygridsearchcv.csv')

print('训练信息已保存至./mygridsearchcv.csv')

二  信息拓展

1  Matplotlib库

Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。Matplotlib 可以用来绘制各种静态,动态,交互式的图表。Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。 图4 Matplotlib官网图

Matplotlib官网地址:Matplotlib中文社区

                                 Matplotlib英文社区

2  Seaborn库

Seaborn 是一个建立在 Matplotlib 基础之上的 Python 数据可视化库,专注于绘制各种统计图形,以便更轻松地呈现和理解数据。Seaborn 的设计目标是简化统计数据可视化的过程,提供高级接口和美观的默认主题,使得用户能够通过少量的代码实现复杂的图形。Seaborn 提供了一些简单的高级接口,可以轻松地绘制各种统计图形,包括散点图、折线图、柱状图、热图等,而且具有良好的美学效果。Seaborn 在设计时注重美观性,其默认主题和颜色调色板经过精心选择,使得绘图更加吸引人。

Seaborn官网地址:Seaborn英文社区

                                Seaborn中文社区

3  Pandas库

Pandas 是 Python 语言的一个扩展程序库,用于数据分析。Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。Pandas 广泛应用在学术、金融、统计学等各个数据分析领域。

Pandas官网地址:Pandas英文社区

                              Pandas中文社区

三  完整代码

1  查看数据集代码

from sklearn.datasets import load_iris

iris_data = load_iris()

print(iris_data.keys())

print(iris_data.data)

print(iris_data.target)

print(iris_data.feature_names)

print(iris_data.target_names)

2  数据可视化代码

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

iris_data = load_iris()

iris_df = pd.DataFrame(iris_data.data,columns=iris_data.feature_names)

iris_df['label'] = iris_data.target

x_name = 'petal width (cm)'

y_name = 'sepal width (cm)'

sns.lmplot(x=x_name,y=y_name,data=iris_df,hue='label',fit_reg=False)

plt.xlabel(x_name)

plt.ylabel(y_name)

plt.title('Iris')

plt.show()

3  无交叉验证-网格搜索版代码

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.neighbors import KNeighborsClassifier

iris_data = load_iris()

x_train,x_test,y_train,y_test = train_test_split(iris_data.data,iris_data.target,test_size=0.2,random_state=2)

train_stand = StandardScaler()

x_train = train_stand.fit_transform(x_train)

x_test = train_stand.transform(x_test)

knn = KNeighborsClassifier(n_neighbors=3)

knn.fit(x_train,y_train)

test_score = knn.score(x_test,y_test)

print('模型评估分:',test_score)

new_sample = [[6.3,5,3,6]]

new_sample = train_stand.transform(new_sample)

new_sample_predict = knn.predict(new_sample)

print(f'样本预测结果为{new_sample_predict},即为{iris_data.target_names[2]}')

4  交叉验证-网格搜索版代码

from sklearn.datasets import load_iris

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import StandardScaler

from sklearn.neighbors import KNeighborsClassifier

from sklearn.model_selection import GridSearchCV

import pandas as pd

iris_data = load_iris()

x_train,x_test,y_train,y_test = train_test_split(iris_data.data,iris_data.target,test_size=0.2,random_state=2)

train_stand = StandardScaler()

x_train = train_stand.fit_transform(x_train)

x_test = train_stand.transform(x_test)

knn = KNeighborsClassifier()

knn = GridSearchCV(knn,param_grid={'n_neighbors': [3, 5, 7, 9, 11]}, cv=5)

knn.fit(x_train, y_train)

best_score = knn.best_score_

best_model = knn.best_estimator_

best_params = knn.best_params_

all_results = knn.cv_results_

print(f'最优分数:{best_score}')

print(f'最优模型:{best_model}')

print(f'最优参数:{best_params}')

mydata = pd.DataFrame(all_results)

mydata.to_csv('./mygridsearchcv.csv')

print('训练信息已保存至./mygridsearchcv.csv')

test_score = knn.score(x_test,y_test)

print('模型评估分:',test_score)

new_sample = [[6.3,5,3,6]]

new_sample = train_stand.transform(new_sample)

new_sample_predict = knn.predict(new_sample)

print(f'样本预测结果为{new_sample_predict},即为{iris_data.target_names[2]}')

四  引用

scikit-learn中文社区

鸢尾花图:鸢尾花(iris)数据集 | 机器学习教程 - 盖若 (gairuo.com)

飞桨AI-人工智能学习与实训社区

机器学习中的数学——距离定义:基础知识_知识距离定义-CSDN博客

Seaborn 教程 | 菜鸟教程 (runoob.com)

Pandas 教程 | 菜鸟教程 (runoob.com)

相关知识

机器学习案例:鸢尾花分类——基于Scikit
scikit
花了1个月时间,把Python库全部整理出来了,覆盖所有,建议收藏
【实战教程】用scikit
鸢尾花数据集 — scikit
基于SK
基于脑
基于GRM501
基于Mask R
基于LSTM

网址: 基于scikit https://m.huajiangbk.com/newsview676917.html

所属分类:花卉
上一篇: 科学网—目前中国植物分类最权威的
下一篇: L1练习