机器算法(1、k近邻算法 2、线性回归)

本文深入解析K-近邻算法(KNN)与线性回归两大机器学习方法,涵盖KNN的距离公式、流程及应用案例,探讨线性回归的模型、损失函数与优化算法,包括正规方程与梯度下降法的应用。
部署运行你感兴趣的模型镜像

1、K-近邻算法

  • K-近邻算法(KNN)概念
    • 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
    • 距离公式:欧式距离
  • KNN算法流程
    • 1、计算已知类别数据集中的点与当前点之间的距离
    • 2、按距离递增次序排序
    • 3、选取与当前点距离最小的k个点
    • 4、统计前k个点所在的类别出现的频率
    • 5、返回前k个点出现频率最高的类别作为当前点的预测分类
  • k近邻算法api
    • Scikit-learn工具
      • pip3 install scikit-learn==0.19.1
      • import sklearn
      • 注:安装scikit-learn需要Numpy, Scipy等库
    • Scikit-learn包含的内容:
      • 分类、聚类、回归
      • 特征工程
      • 模型选择、调优
  • 距离度量
    1.欧式距离(Euclidean Distance):
    通过距离平方值进行计算
    2.曼哈顿距离(Manhattan Distance):
    通过距离的绝对值进行计算
    3.切比雪夫距离 (Chebyshev Distance):
    维度的最大值进行计算
    4.闵可夫斯基距离(Minkowski Distance):
    当p=1时,就是曼哈顿距离;
    当p=2时,就是欧氏距离;
    当p→∞时,就是切比雪夫距离。
    前四个距离公式小结:前面四个距离公式都是把单位相同看待了,所以计算过程不是很科学
    5.标准化欧氏距离 (Standardized EuclideanDistance):
    在计算过程中添加了标准差,对量刚数据进行处理
    6.余弦距离(Cosine Distance):
    通过cos思想完成
    7.汉明距离(Hamming Distance):
    一个字符串到另一个字符串需要变换几个字母,进行统计
    8.杰卡德距离(Jaccard Distance):
    通过交并集进行统计
    9.马氏距离(Mahalanobis Distance):
    通过样本分布进行计算sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
    * n_neighbors:int,可选(默认= 5),k_neighbors查询默认使用的邻居数
    • 案例:步骤分析
      • 1.获取数据集
      • 2.数据基本处理(该案例中省略)
      • 3.特征工程(该案例中省略)
      • 4.机器学习
      • 5.模型评估(该案例中省略)
  • k值的选择
    • K值过小:
      *容易受到异常点的影响
    • k值过大:
      • 受到样本均衡的问题
    • K值的减小就意味着整体模型变得复杂,容易发生过拟合;
    • 与输入实例较远(不相似的)训练实例也会对预测器作用,使预测发生错误,且K值的增大就意味着整体的模型变得简单。
    • 实际应用中,K值一般取一个比较小的数值
  • 过拟合、欠拟合
    • 欠拟合是指模型没有能够很好的表现数据的结构,而出现的拟合度不高的情况。
    • 过拟合是指模型过分的拟合训练样本,但对测试样本预测准确率不高的情况,也就是说模型泛化能力很差
    • 过拟合原因:
      • 数据特征的角度
        数据噪声导致的过拟合:噪声具有一定的随机性与欺骗性,如果把噪声作为有效信息的话,将会导致过拟合。
        缺乏代表性样本导致的过拟合:训练数据集不能很好的反应整体分布可能会导致过拟合;训练数据集较小,但模型过度细化会导致过拟合。
      • 模型的角度
        由于模型过度复杂,使得模型对训练数据拟合较好,但同时拟合了噪声或者与目标不相关的信息导致了过拟合。
  • 过拟合、欠拟合的解决方法
    • 过拟合的可能解决方法:
      a、减少特征:删除与目标不相关特征,如一些特征选择方法

    • 正则化:正则化会保证每个特征有一定的效用,不会使某一特征特别重要。

    • 得到更多的训练样本

    • 迁移学习-----可以解决由于训练数据较小引起的过拟合

  • 近似误差:
    • 对现有训练集的训练误差,关注训练集,
    • 如果近似误差过小可能会出现过拟合的现象,对现有的训练集能有很好的预测,但是对未知的测试样本将会出现较大偏差的预测。
    • 模型本身不是最接近最佳模型。
      估计误差:
    • 可以理解为对测试集的测试误差,关注测试集,
    • 估计误差小说明对未知数据的预测能力好,
    • 模型本身最接近最佳模型。
  • kd树
    • kd树(K-dimension tree)是一种对k维空间中的实例点进行存储以便对其进行快速检索的树形数据结构。kd树是一种二叉树,表示对k维空间的一个划分,构造kd树相当于不断地用垂直于坐标轴的超平面将K维空间切分,构成一系列的K维超矩形区域。
    • kd树的构造:
      • 1.构造根节点
      • 2.通过递归的方法,不断地对k维空间进行切分,生成子节点
      • 3.重复第二步骤,直到子区域中没有示例时终止
      • 需要关注细节:a.选择向量的哪一维进行划分;b.如何划分数据
    • kd树的搜索过程
      • 1.二叉树搜索比较待查询节点和分裂节点的分裂维的值,(小于等于就进入左子树分支,大于就进入右子树分支直到叶子结点)
      • 2.顺着“搜索路径”找到最近邻的近似点
      • 3.回溯搜索路径,并判断搜索路径上的结点的其他子结点空间中是否可能有距离查询点更近的数据点,如果有可能,则需要跳到其他子结点空间中去搜索
      • 4.重复这个过程直到搜索路径为空.
  • scikit-learn数据集
    • sklearn.datasets
      • 加载获取流行数据集
      • datasets.load_*()
        • 获取小规模数据集,数据包含在datasets里
      • datasets.fetch_*(data_home=None)
        • 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,默认是 ~/scikit_learn_data/
      • load和fetch返回的数据类型datasets.base.Bunch(字典格式)
        • data:特征数据数组,是 [n_samples * n_features] 的二维 numpy.ndarray 数组
        • target:标签数组,是 n_samples 的一维 numpy.ndarray 数组
        • DESCR:数据描述
        • feature_names:特征名,新闻数据,手写数字、回归数据集没有
        • target_names:标签名
  • 查看数据分布
    • seaborn介绍
      • Seaborn 是基于 Matplotlib 核心库进行了更高级的 API 封装,可以让你轻松地画出更漂亮的图形。而 Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。
        安装 pip3 install seaborn
        seaborn.lmplot() 是一个非常有用的方法,它会在绘制二维散点图时,自动完成回归拟合

      • sns.lmplot() 里的 x, y 分别代表横纵坐标的列名,

      • data= 是关联到数据集,

      • hue=*代表按照 species即花的类别分类显示,

      • fit_reg=是否进行线性拟合

  • %matplotlib inline是一个魔法函数(Magic Functions) 可以在Ipython编译器里直接使用,功能是可以内嵌绘图,并且可以省略掉plt.show()这一步
  • 交叉验证
  • 交叉验证的目的:为了让被评估的模型更加准确可信
  • 有很多参数是需要手动指定的(如k-近邻算法中的K值),这种叫超参数。但是手动过程繁杂,所以需要对模型预设几种超参数组合。每组超参数都采用交叉验证来进行评估。最后选出最优参数组合建立模型
    sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
    • 对估计器的指定参数值进行详尽搜索
    • estimator:估计器对象
    • param_grid:估计器参数(dict){“n_neighbors”:[1,3,5]}
    • cv:指定几折交叉验证
    • fit:输入训练数据
    • score:准确率
    • 结果分析:
    • bestscore__:在交叉验证中验证的最好结果
    • bestestimator:最好的参数模型
    • cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
对估计器的指定参数值进行详尽搜索
estimator:估计器对象
param_grid:估计器参数(dict){
   
   “n_neighbors”:[1,3,5]}
cv:指定几折交叉验证
fit:输入训练数据
score:准确率
结果分析:
bestscore__:在交叉验证中验证的最好结果
bestestimator:最好的参数模型
cvresults:每次交叉验证后的验证集准确率结果和训练集准确率结果
4 鸢尾花案例增加K值调优
使用GridSearchCV构建估计器
# 1、获取数据集
iris = load_iris()
# 2、数据基本处理 -- 划分数据集
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)
# 3、特征工程:标准化
# 实例化一个转换器类
transfer = StandardScaler(

您可能感兴趣的与本文相关的镜像

Facefusion

Facefusion

AI应用

FaceFusion是全新一代AI换脸工具,无需安装,一键运行,可以完成去遮挡,高清化,卡通脸一键替换,并且Nvidia/AMD等显卡全平台支持

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值