本章节分为详情介绍、信息扩展、完整代码、引用四部分。若需要直接使用代码运行,请直接跳转完整代码部分
中文官网地址:scikit-learn中文社区
英文官网地址:scikit-learn英文社区
scikit-learn(也称sklearn)是一个基于Numpy,SciPy和matplotlib的开源机器学习库,提供分类,回归,聚类,降维,模型选择和预处理等算法。
鸢尾花数据集最初由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英文社区:数据讲解
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分类
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')
Matplotlib官网地址:Matplotlib中文社区
Matplotlib英文社区
Seaborn官网地址:Seaborn英文社区
Seaborn中文社区
Pandas官网地址:Pandas英文社区
Pandas中文社区
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)
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()
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]}')
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练习 |