汽车网站大全汽车网检察院门户网站建设成效
2026/4/18 3:59:16 网站建设 项目流程
汽车网站大全汽车网,检察院门户网站建设成效,长治百度贴吧官网,做网站代码第一不KNN算法 KNN算法简介 【理解】KNN算法思想 K-近邻算法#xff08;K Nearest Neighbor#xff0c;简称KNN#xff09;。比如#xff1a;根据你的“邻居”来推断出你的类别KNN算法思想#xff1a;如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别…KNN算法KNN算法简介【理解】KNN算法思想K-近邻算法K Nearest Neighbor简称KNN。比如根据你的“邻居”来推断出你的类别KNN算法思想如果一个样本在特征空间中的 k 个最相似的样本中的大多数属于某一个类别则该样本也属于这个类别思考如何确定样本的相似性样本相似性样本都是属于一个任务数据集的。样本距离越近则越相似。利用K近邻算法预测电影类型【知道】K值的选择K值过小相当于用较小领域中的训练实例进行预测容易受到异常点的影响。K值的减小就意味着整体模型变得复杂容易发生过拟合举例KNN为训练样本个数无论输入实例是什么只会按训练集中最多的类别进行预测受到样本均衡的影响K值过大相当于用较大领域中的训练实例进行预测受到样本均衡的问题。且K值的增大就意味着整体的模型变得简单欠拟合如何对K值超参数进行调优需要一些方法来寻找这个最合适的K值交叉验证、网格搜索【知道】KNN的应用方式解决问题分类问题、回归问题算法思想若一个样本在特征空间中的 k 个最相似的样本大多数属于某一个类别则该样本也属于这个类别相似性欧氏距离分类问题的处理流程1.计算未知样本到每一个训练样本的距离2.将训练样本根据距离大小升序排列3.取出距离最近的 K 个训练样本4.进行多数表决统计 K 个样本中哪个类别的样本个数最多5.将未知的样本归属到出现次数最多的类别回归问题的处理流程1.计算未知样本到每一个训练样本的距离2.将训练样本根据距离大小升序排列3.取出距离最近的 K 个训练样本4.把这个 K 个样本的目标值计算其平均值5.作为将未知的样本预测的值API介绍分类APIKNN分类APIsklearn.neighbors.KNeighborsClassifier(n_neighbors5)​ n_neighborsint,可选默认 5k_neighbors查询默认使用的邻居数回归APIKNN分类APIsklearn.neighbors.KNeighborsRegressor(n_neighbors5)# 1.工具包fromsklearn.neighborsimportKNeighborsClassifier,KNeighborsRegressor# from sklearn.neighbors import KNeighborsRegressor# 2.数据(特征工程)# 分类# x [[0,2,3],[1,3,4],[3,5,6],[4,7,8],[2,3,4]]# y [0,0,1,1,0]x[[0,1,2],[1,2,3],[2,3,4],[3,4,5]]y[0.1,0.2,0.3,0.4]# 3.实例化# model KNeighborsClassifier(n_neighbors3)modelKNeighborsRegressor(n_neighbors3)# 4.训练model.fit(x,y)# 5.预测print(model.predict([[4,4,5]]))距离度量方法欧式距离曼哈顿距离切比雪夫距离闵氏距离闵可夫斯基距离 Minkowski Distance 闵氏距离不是一种新的距离的度量方式。而是距离的组合 是对多个距离度量公式的概括性的表述特征预处理为什么进行归一化、标准化特征的单位或者大小相差较大或者某特征的方差相比其他的特征要大出几个数量级容易影响支配目标结果使得一些模型算法无法学习到其它的特征。归一化通过对原始数据进行变换把数据映射到【mi,mx】(默认为[0,1])之间数据归一化的API实现sklearn.preprocessing.MinMaxScaler (feature_range(0,1)… )feature_range 缩放区间调用 fit_transform(X) 将特征进行归一化缩放归一化受到最大值与最小值的影响这种方法容易受到异常数据的影响, 鲁棒性较差适合传统精确小数据场景标准化通过对原始数据进行标准化转换为均值为0标准差为1的标准正态分布的数据mean 为特征的平均值σ 为特征的标准差数据标准化的API实现sklearn.preprocessing.StandardScaler()调用 fit_transform(X) 将特征进行归一化缩放# 1.导入工具包fromsklearn.preprocessingimportMinMaxScaler,StandardScaler# 2.数据(只有特征)x[[90,2,10,40],[60,4,15,45],[75,3,13,46]]# 3.实例化(归一化,标准化)# process MinMaxScaler()processStandardScaler()# 4.fit_transform 处理1dataprocess.fit_transform(x)# print(data)print(process.mean_)print(process.var_)对于标准化来说如果出现异常点由于具有一定数据量少量的异常点对于平均值的影响并不大利用KNN算法进行鸢尾花分类鸢尾花Iris Dataset数据集是机器学习领域经典数据集鸢尾花数据集包含了150条鸢尾花信息每50条取自三个鸢尾花中之一Versicolour、Setosa和Virginica每个花的特征用如下属性描述代码实现# 导入工具包fromsklearn.datasetsimportload_iris# 加载鸢尾花测试集的.importseabornassnsimportpandasaspdimportmatplotlib.pyplotaspltfromsklearn.model_selectionimporttrain_test_split# 分割训练集和测试集的fromsklearn.preprocessingimportStandardScaler# 数据标准化的fromsklearn.neighborsimportKNeighborsClassifier# KNN算法 分类对象fromsklearn.metricsimportaccuracy_score# 模型评估的, 计算模型预测的准确率# 1. 定义函数 dm01_loadiris(), 加载数据集.defdm01_loadiris():# 1. 加载数据集, 查看数据iris_dataload_iris()print(iris_data)# 字典形式, 键: 属性名, 值: 数据.print(iris_data.keys())# 1.1 查看数据集print(iris_data.data[:5])# 1.2 查看目标值.print(iris_data.target)# 1.3 查看目标值名字.print(iris_data.target_names)# 1.4 查看特征名.print(iris_data.feature_names)# 1.5 查看数据集的描述信息.print(iris_data.DESCR)# 1.6 查看数据文件路径print(iris_data.filename)# 2. 定义函数 dm02_showiris(), 显示鸢尾花数据.defdm02_showiris():# 1. 加载数据集, 查看数据iris_dataload_iris()# 2. 数据展示# 读取数据, 并设置 特征名为列名.iris_dfpd.DataFrame(iris_data.data,columnsiris_data.feature_names)# print(iris_df.head(5))iris_df[label]iris_data.target# 可视化, x花瓣长度, y花瓣宽度, datairis的df对象, hue颜色区分, fit_regFalse 不绘制拟合回归线.sns.lmplot(xpetal length (cm),ypetal width (cm),datairis_df,huelabel,fit_regFalse)plt.title(iris data)plt.show()# 3. 定义函数 dm03_train_test_split(), 实现: 数据集划分defdm03_train_test_split():# 1. 加载数据集, 查看数据iris_dataload_iris()# 2. 划分数据集, 即: 特征工程(预处理-标准化)x_train,x_test,y_train,y_testtrain_test_split(iris_data.data,iris_data.target,test_size0.2,random_state22)print(f数据总数量:{len(iris_data.data)})print(f训练集中的x-特征值:{len(x_train)})print(f训练集中的y-目标值:{len(y_train)})print(f测试集中的x-特征值:{len(x_test)})# 4. 定义函数 dm04_模型训练和预测(), 实现: 模型训练和预测defdm04_model_train_and_predict():# 1. 加载数据集, 查看数据iris_dataload_iris()# 2. 划分数据集, 即: 数据基本处理x_train,x_test,y_train,y_testtrain_test_split(iris_data.data,iris_data.target,test_size0.2,random_state22)# 3. 数据集预处理-数据标准化(即: 标准的正态分布的数据集)transferStandardScaler()# fit_transform(): 适用于首次对数据进行标准化处理的情况通常用于训练集, 能同时完成 fit() 和 transform()。x_traintransfer.fit_transform(x_train)# transform(): 适用于对测试集进行标准化处理的情况通常用于测试集或新的数据. 不需要重新计算统计量。x_testtransfer.transform(x_test)# 4. 机器学习(模型训练)estimatorKNeighborsClassifier(n_neighbors5)estimator.fit(x_train,y_train)# 5. 模型评估.# 场景1: 对抽取出的测试集做预测.# 5.1 模型评估, 对抽取出的测试集做预测.y_predictestimator.predict(x_test)print(f预测结果为:{y_predict})# 场景2: 对新的数据进行预测.# 5.2 模型预测, 对测试集进行预测.# 5.2.1 定义测试数据集.my_data[[5.1,3.5,1.4,0.2]]# 5.2.2 对测试数据进行-数据标准化.my_datatransfer.transform(my_data)# 5.2.3 模型预测.my_predictestimator.predict(my_data)print(f预测结果为:{my_predict})# 5.2.4 模型预测概率, 返回每个类别的预测概率my_predict_probaestimator.predict_proba(my_data)print(f预测概率为:{my_predict_proba})# 6. 模型预估, 有两种方式, 均可.# 6.1 模型预估, 方式1: 直接计算准确率, 100个样本中模型预测正确的个数.my_scoreestimator.score(x_test,y_test)print(my_score)# 0.9666666666666667# 6.2 模型预估, 方式2: 采用预测值和真实值进行对比, 得到准确率.print(accuracy_score(y_test,y_predict))# 在main方法中测试.if__name____main__:# 1. 调用函数 dm01_loadiris(), 加载数据集.# dm01_loadiris()# 2. 调用函数 dm02_showiris(), 显示鸢尾花数据.# dm02_showiris()# 3. 调用函数 dm03_train_test_split(), 查看: 数据集划分# dm03_train_test_split()# 4. 调用函数 dm04_模型训练和预测(), 实现: 模型训练和预测dm04_model_train_and_predict()超参数选择的方法交叉验证交叉验证是一种数据集的分割方法将训练集划分为 n 份其中一份做验证集、其他n-1份做训练集集交叉验证法原理将数据集划分为 cv10 份1.第一次把第一份数据做验证集其他数据做训练2.第二次把第二份数据做验证集其他数据做训练3… 以此类推总共训练10次评估10次。4.使用训练集验证集多次评估模型取平均值做交叉验证为模型得分5.若k5模型得分最好再使用全部训练集(训练集验证集) 对k5模型再训练一边再使用测试集对k5模型做评估交叉验证法是划分数据集的一种方法目的就是为了得到更加准确可信的模型评分。【知道】网格搜索交叉验证网格搜索的API:交叉验证网格搜索在鸢尾花分类中的应用fromsklearn.datasetsimportload_iris# 加载鸢尾花测试集的.fromsklearn.model_selectionimporttrain_test_split,GridSearchCV# 分割训练集和测试集的, 网格搜索的fromsklearn.preprocessingimportStandardScaler# 数据标准化的fromsklearn.neighborsimportKNeighborsClassifier# KNN算法 分类对象fromsklearn.metricsimportaccuracy_score# 模型评估的, 计算模型预测的准确率# 1. 获取数据集.iris_dataload_iris()# 2. 数据基本处理-划分数据集.x_train,x_test,y_train,y_testtrain_test_split(iris_data.data,iris_data.target,test_size0.2,random_state22)# 3. 数据集预处理-数据标准化.transferStandardScaler()x_traintransfer.fit_transform(x_train)x_testtransfer.transform(x_test)# 4. 模型训练.# 4.1 创建估计器对象.estimatorKNeighborsClassifier()# 4.2 使用校验验证网格搜索. 指定参数范围.param_grid{n_neighbors:range(1,10)}# 4.3 具体的 网格搜索过程 交叉验证.# 参1: 估计器对象, 参2: 参数范围, 参3: 交叉验证的折数.estimatorGridSearchCV(estimatorestimator,param_gridparam_grid,cv5)# 具体的模型训练过程.estimator.fit(x_train,y_train)# 4.4 交叉验证, 网格搜索结果查看.print(estimator.best_score_)# 模型在交叉验证中, 所有参数组合中的最高平均测试得分print(estimator.best_estimator_)# 最优的估计器对象.print(estimator.cv_results_)# 模型在交叉验证中的结果.print(estimator.best_params_)# 模型在交叉验证中的结果.# 5. 得到最优模型后, 对模型重新预测.estimatorKNeighborsClassifier(n_neighbors6)estimator.fit(x_train,y_train)print(f模型评估:{estimator.score(x_test,y_test)})# 因为数据量和特征的问题, 该值可能小于上述的平均测试得分.利用KNN算法实现手写数字识别MNIST手写数字识别 是计算机视觉领域中 hello world级别的数据集1999年发布成为分类算法基准测试的基础随着新的机器学习技术的出现MNIST仍然是研究人员和学习者的可靠资源。本次案例中目标是从数万个手写图像的数据集中正确识别数字。数据介绍数据文件 train.csv 和 test.csv 包含从 0 到 9 的手绘数字的灰度图像。每个图像高 28 像素宽28 像素共784个像素。每个像素取值范围[0,255]取值越大意味着该像素颜色越深训练数据集train.csv共785列。第一列为 “标签”为该图片对应的手写数字。其余784列为该图像的像素值训练集中的特征名称均有pixel前缀后面的数字[0,783])代表了像素的序号。像素组成图像如下000001002003...026027028029030031...054055056057058059...082083||||......||728729730731...754755756757758759...782783数据集示例如下:importmatplotlib.pyplotaspltimportpandasaspdfromsklearn.model_selectionimporttrain_test_splitfromsklearn.neighborsimportKNeighborsClassifierimportjoblibfromcollectionsimportCounter# 1. 显示图片.defshow_digit(idx):# 1.1 加载数据.datapd.read_csv(手写数字识别.csv)# 1.2非法值校验.ifidx0oridxlen(data)-1:return# 1.3 打印数据基本信息xdata.iloc[:,1:]ydata.iloc[:,0]print(f数据基本信息:{x.shape}))print(f类别数据比例:{Counter(y)})# 显示图片# 1.4 将数据形状修改为: 28*28digitx.iloc[idx].values.reshape(28,28)# 1.5 关闭坐标轴标签plt.axis(off)# 1.6 显示图像plt.imshow(digit,cmapgray)# 灰色显示plt.show()# 2. 训练模型.deftrain_model():# 1. 加载数据.datapd.read_csv(手写数字识别.csv)xdata.iloc[:,1:]ydata.iloc[:,0]# 2.数据预处理, 归一化.xx/255# 3. 分割训练集和测试集.# stratify: 按照y的类别比例进行分割x_train,x_test,y_train,y_testtrain_test_split(x,y,test_size0.2,stratifyy,random_state21)# 4. 训练模型estimatorKNeighborsClassifier(n_neighbors3)estimator.fit(x_train,y_train)# 5. 模型评估my_scoreestimator.score(x_test,y_test)print(f测试集准确率为:{my_score:.2f})# 6. 模型保存.joblib.dump(estimator,model/knn.pth)# 3. 测试模型.defuse_model():# 1. 读取图片imgplt.imread(data/demo.png)# 灰度图, 28*28像素plt.imshow(img,cmapgray)plt.show()# 2. 加载模型.estimatorjoblib.load(model/knn.pth)# 3. 预测图片.imgimg.reshape(1,-1)# 形状从: (28, 28) (1, 784)# print(img.shape)y_testestimator.predict(img)print(f您绘制的数字是:{y_test})# 在main函数中测试if__name____main__:# 1. 调用函数, 查看图片.# show_digit(0)# show_digit(10)# show_digit(100)# 2. 训练模型.# train_model()# 3. 测试模型use_model()

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询