代码展示:
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn.datasets import load_iris
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import KNeighborsClassifier
from sklearn.preprocessing import MinMaxScaler
#获取数据集
iris = load_iris()
# print("鸢尾花的特征值:\n",iris['data'])
# print("鸢尾花的目标值:\n",iris['target'])
# print("鸢尾花的特征的名字:\n",iris['feature_names'])
# print("鸢尾花的目标值的名字:\n",iris['target_names'])
# print("鸢尾花的描述:\n",iris['DESCR'])
#数据可视化--仅仅为了可视化
#1.表格化数据,便于操作
iris_data =pd.DataFrame(data = iris['data'],columns=['Sepal_Length', 'Sepal_Width', 'Petal_Length', 'Petal_Width'])
#2.填充目标值
iris_data['target'] = iris.target
#3.绘制
def iris_plot(data,col1,col2):
sns.lmplot(x= col1,y= col2,data= iris_data,hue='target',fit_reg=False)
plt.title(r'data show')
plt.xlabel(col1)
plt.ylabel(col2)
plt.show()
iris_plot(iris_data,'Sepal_Length','Petal_Width')
#划分数据集
x_train,x_test,y_train,y_test = train_test_split(iris['data'],iris['target'],test_size=0.2,random_state=42)
#特征处理
#这里用归一化处理
transfer = MinMaxScaler(feature_range=(0,1))
ret_train_data = transfer.fit_transform(x_train)
ret_test_data = transfer.fit_transform(x_test)
#机器学习--构建KNN
#1.构建KNN,并实例化
k = 5
knn_model = KNeighborsClassifier(n_neighbors=k)
#2.调用交叉验证,网格搜索API
param_grid = {'n_neighbors':[1,3,5,7,9]}
knn_model = GridSearchCV(knn_model,param_grid=param_grid,cv = 10,n_jobs=-1)
#3.模型训练
knn_model.fit(ret_train_data,y_train)
#4.模型评估
y_pre = knn_model.predict(ret_test_data)
print('预测值是\n',y_pre)
print("预测值和真实值的对比是:\n",y_pre==y_test)
#准确率计算,注意如果是归一化后的数据就得用归一化后的数据进行预测计算准确率,不然效果很差
score=knn_model.score(ret_test_data,y_test)
print(f'准确率是:{score}')
#其他评价指标
print('最好的模型:\n',knn_model.best_estimator_)
print('最好的结果:\n',knn_model.best_score_)
print('整体模型结果:\n',knn_model.cv_results_)
结果展示: