分类:K-近邻分类之鸢尾花数据集学习(包含数据预处理中的标准化)(环境:Pycharm)
标准化:用数据的特征列减去该特征列均值进行中心化,再除以标准差进行缩放
1、模型精确度的探究
1 2 3 4 5 6 7 8 9 10 11 12 | from sklearn.datasets import load_iris #导入鸢尾花数据集 from sklearn.neighbors import KNeighborsClassifier #导入k-近邻分类模型 from sklearn.model_selection import train_test_split as tsplit from sklearn.preprocessing import StandardScaler #标准化函数导入 X,y=load_iris(return_X_y=True) #导入的数据是数组形式 X_train,X_test,y_train,y_test=tsplit(X,y,test_size=0.1) #test_size是数据划分的比列,X为训练集,y为测试集,二者的比例为9:1 transfer=StandardScaler() #标准化 X_train=transfer.fit_transform(X_train) X_test=transfer.transform(X_test) estimator=KNeighborsClassifier() #实例化模型。n_neighbors参数默认值为5 estimator.fit(X_test,y_test) #训练模型 print(estimator.score(X_test,y_test)) #模型测试精度(介于0~1) |
2、绘制鸢尾花的分类图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from sklearn.datasets import load_iris import seaborn as sns import matplotlib.pyplot as plt import pandas as pd plt.rcParams[ "font.sans-serif" ]=[ "SimHei" ] #设置中文字体 plt.rcParams[ "axes.unicode_minus" ]=False X,y=load_iris(return_X_y=True) iris_d=pd.DataFrame(X,columns=[ 'Sepal_Length' , 'Sepal_Width' , 'Petal_length' , 'Petal_Width' ]) #将导入的array数组类型数据转化为DataFrame类型 iris_d[ 'Species' ]=y #加1列类别 def plot_iris(iris, col1, col2): sns.lmplot(x = col1, y = col2, data =iris, hue = "Species" , fit_reg = False) plt.xlabel(col1) plt.ylabel(col2) plt.title( '鸢尾花种类分布图' ) plt.show() plot_iris(iris_d, 'Petal_Width' , 'Sepal_Length' ) |
3、附男生受欢迎程度
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | # 三个特征值(每月飞行公里数,吃甜点量,打游戏时间),三个目标值(1:差,2:中3:优)'''(该csv文件不在,是模型引用的展示,只要是相同形式的csv文件,都可以直接套用;不一样的形式可以利用pandas切片等函数改成相同形式。)/ import sklearn from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.neighbors import KNeighborsClassifier import pandas as pd import numpy as np man = pd.read_csv( "E:\\dating.csv" ) #导入csv文本数据 man_1=man[[ 'milage' , 'Liters' , 'Consumtime' ]] man_2=man[ 'target' ] man.data=np.array(man_1) man.target=np.array(man_2) x_train, x_test, y_train, y_test = train_test_split(man.data, man.target, test_size=0.2, ) 3、特征工程:标准化 transfer = StandardScaler() x_train = transfer.fit_transform(x_train) x_test = transfer.transform(x_test) 4、机器学习(模型训练) estimator = KNeighborsClassifier(n_neighbors=9) estimator.fit(x_train, y_train) 5、模型评估 方法1:比对真实值和预测值 y_predict = estimator.predict(x_test) print( "预测结果为:\n" , y_predict) print( "比对真实值和预测值:\n" , y_predict == y_test) 方法2:直接计算准确率 score = estimator.score(x_test, y_test) print( "准确率为:\n" , score)` |
K-近邻算法(k-近邻分类模型)总结
优点:
简单有效
重新训练的代价低
适合类域交叉样本
KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合。
适合大样本自动分类
该算法比较适用于样本容量比较大的类域的自动分类,而那些样本容量较小的类域采用这种算法比较容易产生误分。
缺点:
惰性学习
KNN算法是懒散学习方法(lazy learning,基本上不学习),一些积极学习的算法要快很多
类别评分不是规格化
输出可解释性不强
计算量较大
参考原文链接:https://blog.csdn.net/weixin_44868393/article/details/106683294
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)