基于scikit
本章节分为详情介绍、信息扩展、完整代码、引用四部分。若需要直接使用代码运行,请直接跳转完整代码部分
一 详情介绍
1 scikit-learn库介绍
中文官网地址:scikit-learn中文社区
英文官网地址:scikit-learn英文社区
scikit-learn(也称sklearn)是一个基于Numpy,SciPy和matplotlib的开源机器学习库,提供分类,回归,聚类,降维,模型选择和预处理等算法。

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

在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 个最相似的样本大多数属于某一个类别,则该样本也属于这个类别。
相似主要以距离计算作为比较标准。常见的距离计算方式有曼哈顿距离、欧式距离和切比雪夫距离三种,详情见(机器学习中的数学——距离)
曼哈顿距离:K值过小:用较小领域中的训练实例进行预测。
容易受到异常点的影响;K值得减小就意味着整体模型变得复杂,容易发生过拟合。K值过大:用较大领域中得训练实例进行预测。
受到岩本均衡得问题;且K值的增大就意味着整体的模型变简单,容易发生欠拟合。K值调优:原理都是人为设定不同的K值(人为设定的参数,称为超参数),一个一个测试,选择最优情况。
交叉验证:是划分数据集的一种方法,目的就是为了得到更加准确可信的模型评分。网格搜索:网格搜索是模型调参的有力工具。寻找最优超参数的工具。scikit-learn的KNN分类算法详情:scikit-learn中文社区:KNN分类
scikit-learn英文社区:KNN分类
4 编程流程与API介绍
4.1 编程流程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()
结果如图所示

数据集划分
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 图形、甚至是图形动画等等。
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://www.huajiangbk.com/newsview676917.html
上一篇: 科学网—目前中国植物分类最权威的 |
下一篇: L1练习 |
推荐分享

- 1君子兰什么品种最名贵 十大名 4012
- 2世界上最名贵的10种兰花图片 3364
- 3花圈挽联怎么写? 3286
- 4迷信说家里不能放假花 家里摆 1878
- 5香山红叶什么时候红 1493
- 6花的意思,花的解释,花的拼音 1210
- 7教师节送什么花最合适 1167
- 8勿忘我花图片 1103
- 9橄榄枝的象征意义 1093
- 10洛阳的市花 1039