''' 完整的 鸢尾花预测流程 1.导入数据 2.切分数据集---->将数据集分为 训练集和测试集 3.特征预理---->使用归一化 或者 标准化 ---->因为不改变数据的分布情况,所以不会影响结果 4.训练模型 5.评估模型 ''' # 导入 鸢尾花数据 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 # 1.先导入数据 iris = load_iris() # 2.切割数据集 传入 数据 目标值 训练集比例 随机数种子 x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,train_size=0.2,random_state=22) # 3.特征处理 ---标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) ''' 4.模型训练 实例化模型函数 ''' # 实例化模型函数 选择k值范围大小 选 9 范围内的数量最多的种类确定为自己的种类 estimator= KNeighborsClassifier() # 模型调优 交叉验证 ----将数据集分为 训练集 和测试集 然后轮流训练 训练出最好的模型 # 网格搜索是针对 影响参数选择的部分进行选择 同时有多个 选择出参数最好的 param_grid = {"n_neighbors":[1,3,5,7]} # 使用GridSearchCV函数进行交叉验证和网格搜索 模型--->要优化的模型 参数---->字典,要传入的参数 cv-----》对折次数 estimator = GridSearchCV(estimator,param_grid=param_grid,cv=5) # 使用训练集进行训练 estimator.fit(x_train,y_train) # 5.模型评估 yEndpredict = estimator.predict(x_test) #1.直接评测 结果 print("预测结果为:\n",yEndpredict ) print("预测结果为:\n",yEndpredict == y_test) # 2.评测准确率 score = estimator.score(x_test,y_test) print("该模型的准确率为:",score) # 3.使用交叉网格优化后的数据 print("得到到最好的模型:",estimator.best_estimator_,"\n") print("得到的最好的值",estimator.best_score_,"\n") print("得到的最好的参数",estimator.best_params_,"\n")