特征工程及KNN算法

特征工程

1.1特征工程概念

特征工程是指使用领域知识来创建能够使机器学习模型表现更好的特征。这个过程包括多个步骤,如特征选择、特征提取、特征构造和特征转换。

1.2 特征工程涉及内容

1.2.1 特征提取:是从原始数据中创建新的特征,这些新特征可能比原始特征更能代表数据的本质属性。

1.2.2 特征降维:旨在减少数据集中的特征数量,同时尽可能保留原始数据的信息和结构。

1.2.3 特征选择:是从现有特征中选择最相关的特征子集,以提高模型的性能和减少计算成本。

1.2.4 特征预处理:涉及到将原始数据转换成一个适合模型训练的格式。】目的是提高数据的质量,使其更适合于分析。

1.3 拟合

拟合(Fitting)是指模型对训练数据的适应程度。模型可能会遇到三种不同的拟合情况:过拟合(Overfitting)、欠拟合(Underfitting)和恰当拟合(Proper Fitting)

  • 过拟合:使用更多的训练数据、简化模型、应用正则化技术、使用交叉验证等。
  • 欠拟合:增加模型复杂度、添加更多的特征、减少正则化强度、使用更复杂的模型等。
  • 恰当拟合:找到一个平衡点,使得模型既不会太简单也不会太复杂,能够捕捉数据的主要模式同时具有较好的泛化能力。

KNN算法

2.1 KNN算法简介

KNN(K-Nearest Neighbors,K-最近邻)算法是一种基于距离的分类算法,它也可以用于回归问题。KNN算法的核心思想是,一个数据点的类别(分类问题)或数值(回归问题)可以由它的K个最近邻的数据点类别的类别加权投票(分类问题)或平均(回归问题)得到。以下是KNN算法在分类和回归问题中的应用:

KNN分类(KNN Classification)

  1. 确定K值:选择一个正整数K,它决定了评估新数据点时将考虑多少个最近的邻居。

  2. 距离计算:计算待分类点与其他所有点之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。

  3. 寻找最近邻:找出距离待分类点最近的K个点。

  4. 类别决策

    • 对于分类问题,统计这K个邻居中每个类别的出现次数。
    • 使用加权投票法或多数投票法来预测新数据点的类别。
  5. 返回结果:返回得票最多的类别作为新数据点的预测类别。

  6. 代码实现

    #导入KNeighborsClassifier类
    from sklearn.neighbors import KNeighborsClassifier
    
    #创建了一个KNN分类器实例estimator,n_neighbors=n参数指定了邻居的数量,即K值为n
    estimator = KNeighborsClassifier(n_neighbors=2)
    
    #定义数据集(X是一个二维列表,包含了四个数据点。y是一个一维列表,包含了与X中数据点对应的类别标签)
    X = [[0], [1], [2], [3]]
    y = [0, 0, 0, 1]
    
    #训练模型
    estimator.fit(X, y)
    
    #进行预测
    myret = estimator.predict([[4]])
    
    #输出预测结果
    print(f'预测值:{myret}')

KNN回归(KNN Regression)

  1. 确定K值:与分类问题相同,选择一个正整数K。

  2. 距离计算:同样计算待预测点与其他所有点之间的距离。

  3. 寻找最近邻:找出距离待预测点最近的K个点。

  4. 数值预测

    • 对于回归问题,计算这K个邻居的连续数值的平均值。
    • 这个平均值作为新数据点的预测输出。
  5. 返回结果:返回这个平均值作为新数据点的预测结果。

  6. 代码实现

    #从sklearn.neighbors模块导入了KNeighborsRegressor类,用于回归问题
    from sklearn.neighbors import KNeighborsRegressor
    
    #创建了一个KNN回归器实例estimator,n_neighbors=n参数指定了邻居的数量,即K值为n
    estimator = KNeighborsRegressor(n_neighbors=3)
    
    #定义数据集(X是一个二维列表,包含了四个数据点,每个数据点是一个一维列表,其中包含了三个特征。y是一个一维列表,包含了与X中数据点对应的连续数值)
    X = [[0, 1, 1],[1, 0, 0],[ 3, 9, 10],[4, 8, 7]]
    y = [0.1, 0.2, 0.3, 0.4]
    
    #训练模型
    estimator.fit(X, y)
    
    #进行预测
    myret = estimator.predict([[1, 1, 0]])
    
    #输出预测结果
    print(f'预测值:{myret}')
    

  • 27
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值