KNN算法实例——鸢尾花种类预测

线性回归的scikit-learn实现

scikit-learn中提供了一个KNeighborClassifier类来实现k近邻法分类模型

方法:

fit(X,y):训练模型
predict:使用模型来预测,返回待预测样本的标记。
score(X,y):返回在(X,y)上预测的准确率。
predict_proba(X):返回样本为每种标记的概率。
kneighbors([X,n_neighbors,return_distance]):返回样本点的k近邻点。如果return_diatance=True,同时还返回到这些近邻点的距离。
kneighbors_graph([X,n_neighbors,model]):返回样本点的连接图。

导入模块:from sklearn.neighbors import KNeighborsClassifier

案例:一个简单的KNN实例

# 导入模块
from sklearn.neighbors import KNeighborsClassifier
# 1.构造函数
x=[[1],[2],[3],[4]]
y=[0,0,1,1]
# 2.训练模型
# 2.1实例化一个估计器对象
estimator = KNeighborsClassifier(n_neighbors=3)

# 2.2调用fit方法,进行训练
estimator.fit(x,y)

# 3.数据预测
ret = estimator.predict([[2.51]])
print(ret)
# 可以这样理解,x是特征值,是dataframe形式理解为二维的[[]];
# y表示的目标值,可以表示为series,表示为一维数组[]
ret1 = estimator.predict([[2.52]])
print(ret1)
ret2 = estimator.predict([[1.50]])
print(ret2)

结果:

案例:鸢尾花种类预测

Iris数据集是常用的分类实验数据集,由Fisher, 1936收集整理。Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。关于数据集的具体介绍:

KNN算法实例——鸢尾花种类预测_第1张图片

可视化显示鸢尾花种类分布:

import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris,fetch_20newsgroups
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier

# 显示中文
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False 

def iris_plot(data,col1,col2):
    # lmplot是用来绘制回归图的
    sns.lmplot(x=col1,y=col2,data=data,hue="target",fit_reg=False)
    plt.title("鸢尾花数据显示")
    plt.show

# 1.1小数据集获取
iris = load_iris()
# 3.数据可视化
iris_d = pd.DataFrame(data=iris.data,columns=['Sepal_Lenght','Sepal_Width','Petal_Length','Petal_Width'])
iris_d["target"] = iris.target
iris_plot(iris_d,'Sepal_Width','Petal_Length')

 图像显示:

KNN算法实例——鸢尾花种类预测_第2张图片

数据预处理 

在现实生活问题中,我们得到的原始数据往往非常混乱、不全面,机器学习模型往往无法从中有效识别并提取信息。数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已,在采集完数据后,机器学习建模的首要步骤以及主要步骤便是数据预处理。

在此文仅展示归一化与标准化操作:

归一化:

"""
归一化演示
:return:None
"""
from sklearn.preprocessing import MinMaxScaler
data = pd.read_csv("数据文件路径")
print(data)

# 1.实例化
transfer = MinMaxScaler(feature_range=(3,5))


# 2.进行转换,调用fit_transform
ret_data = transfer.fit_transform(data[["x","y","time"]])
print("归一化之后的数据为:\n",ret_data)

标准化:

"""
标准化演示
:return:None
"""
from sklearn.preprocessing import StandardScaler
data = pd.read_csv("数据文件路径")
print(data)
    
# 1.实例化
transfer = StandardScaler()
    
# 2.进行转化,调用fit_transform
ret_data = transfer.fit_transform(data[["x","y","time"]])
print("标准化之后的数据为:\n",ret_data)
print("每一列的方差为:\n",transfer.var_)
print("每一列的平均值为:\n",transfer.mean_)

种类预测:

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier


data = load_iris
  
# x_train,x_test,y_train,y_test为训练集特征值,测试集特征值,训练集目标值,测试集目标值
x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)

# 3.特征工程:标准化
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)

# 4.机器学习
estimator = KNeighborsClassifier(n_neighbors=9,algorithm='kd_tree')
estimator.fit(x_train,y_train)

# 5.模型评估
#  方法一:比对真实值和预测值
y_predict = estimator.predict(x_test)
print("预测结果为:\n",y_predict)
print("比对真实值和预测值:\n",y_predict==y_test)

评估结果:

KNN算法实例——鸢尾花种类预测_第3张图片

 获取准确率:

# 方法二
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)

 模型的保存与加载

import joblib

#保存
joblib.dump(estimator,"路径+文件名")

#加载
estimator = joblib.load("路径+文件名")

K值调优:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier

# 实例化一个估计器
estimator = KNeighborsClassifier(n_neighbors=5)
# 模型调优——交叉验证,网格搜索
param_grid = {"n_neighbors": [1,3,5,7]}
estimator = GridSearchCV(estimator,param_grid=param_grid,cv=5)
# 模型训练
estimator.fit(x_train,y_train)
#模型评估
#预测值结果输出
y_pre = estimator.predict(x_test)
print("预测值是:\n",y_pre)
#准确率计算
score = estimator.score(x_test,y_test)
print("准确率为:\n",score)
#查看交叉验证,网格搜索的一些属性
print("在交叉验证中验证的最好结果:\n",estimator.best_score_)
print("最好的参数模型:\n",estimator.best_estimator_)
print("交叉验证后的准确率结果:\n",estimator.cv_results_)

结果:

KNN算法实例——鸢尾花种类预测_第4张图片

至此鸢尾花的种类预测功能已基本完成!

如有任何错误或疑问,欢迎评论区留言 

你可能感兴趣的:(算法,python)