二、特征工程 - 特征预处理

本文详细介绍了在IT技术中,如何使用sklearn.preprocessing库中的归一化和标准化API对数值型数据进行预处理,以解决特征单位差异和方差问题。通过示例展示了MinMaxScaler和StandardScaler的使用方法以及它们在不同场景下的适用性。
摘要由CSDN通过智能技术生成

目录

1、包含内容

2、特征预处理API

3、归一化

3.1 定义

3.2 公式

3.3 API

3.4 归一化总结

4、标准化

4.1 定义

4.2 公式

4.3 API

4.4 标准化总结

5、代码总结


1、包含内容

数值型数据的无量纲化

  • 归一化
  • 标准化

2、特征预处理API

sklearn.preprocessing

为什么我们要进行归一化 / 标准化?

  • 特征的单位或者大小相差较大,或者某特征的方差相比其他的特征要大出几个数量级,容易影响(支配)目标结果,使得一些算法无法学习到其他的特征。

3、归一化

3.1 定义

通过对原始数据进行变换把数据映射到(默认为[0,1])之间

3.2 公式

3.3 API

sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
  • MinMaxScalar.fit_transform(X)
  • X:numpy array格式的数据  [n_samples,n_features]
  • 返回值:转换后的形状相同的array
import pandas as pd

def minmax_demo():
#     归一化
#     1、获取数据
      data = pd.read_csv("dating.txt")
      # 前三列数据
      data = data.iloc[:,:3]
      print(data)
      # 2、实例化一个转换器
      transfer = MinMaxScaler()
      # 3、调用fit_transform
      data_new = transfer.fit_transform(data)
      print(data_new)
      return None



if __name__ == '__main__':
    minmax_demo()

3.4 归一化总结

注意如果最大值最小值是变化的,另外,最大值与最小值非常容易受异常点影响,

所以这种方法鲁棒性(稳定性)较差,只适合传统精确小数据场景。

4、标准化

4.1 定义

通过对原始数据进行变换到均值为0,标准差为1的范围内

4.2 公式

4.3 API

sklearn.preprocessing.StandardScaler()
  • 处理之后,对每列来说,所有数据都聚集在均值为0附近,标准差为1
  • StandardScaler.fit_transform(X)
  • X:numpy array格式的数据(n_samples,n_features)
  • 返回值:转换后的形状相同的array
def stand_demo():
#     标准化
#     1、获取数据
      data = pd.read_csv("dating.txt")
      # 前三列数据
      data = data.iloc[:,:3]
      print(data)
      # 2、实例化一个转换器
      transfer = StandardScaler()
      # 3、调用fit_transform
      data_new = transfer.fit_transform(data)
      print(data_new)
      return None


if __name__ == '__main__':  
    stand_demo()

4.4 标准化总结

在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据前景

5、代码总结

from sklearn.datasets import load_iris
from sklearn.feature_extraction import DictVectorizer
from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer
from sklearn.model_selection import train_test_split
import jieba
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler


def datasets_demo():
    # 获取数据集
    iris = load_iris()
    print("鸢尾花数据集:\n",iris)
    print("查看数据集描述:\n",iris["DESCR"])
    print("查看特征值的名字:\n",iris.feature_names)
    print("查看特征值:\n",iris.data,iris.data.shape)

    # 数据集划分
    # random_state=22 随机种子,因为随机种子是固定的,所以每次运行程序时都会得到相同的训练集和测试集
    # 这对于代码的可重复性和调试非常有用
    x_train,x_test,y_train,y_test=train_test_split(iris.data,iris.target,test_size=0.2,random_state=22)
    print("训练集的特征值:\n",x_train,x_train.shape)
    return None

def dict_demo():
#     字典特征抽取  DictVectorizer
     data=[{'city':'背景','temperature':100},{'city':'shan','temperature':200}]
     # 1、实例化一个转换器
     transfer = DictVectorizer(sparse=False)
     # 2、调用fit_transform()
     data_new = transfer.fit_transform(data)
     print("data_new:\n",data_new)
     return None

def count_demo():
#     文本特征提取
      data = ["life is short,i like python","life is too long,i dislike python"]
      # 1、实例化一个转换器类
      transfer = CountVectorizer()
      # 2、调用fit_transform
      data_new = transfer.fit_transform(data)
      print("data_new:\n", data_new.toarray())
      print("特征名字:\n",transfer.get_feature_names_out())
      return None


def count_chinese_demo():
#     中文文本特征提取
      data = ["呜呜 呜呜 等等 是 否 分析","等等 实时 还"]
      # 1、实例化一个转换器类
      transfer = CountVectorizer()
      # 2、调用fit_transform
      data_new = transfer.fit_transform(data)
      print("data_new:\n", data_new.toarray())
      print("特征名字:\n",transfer.get_feature_names_out())
      return None


def cut_word(text):
    # 进行中文分词
    return " ".join(list(jieba.cut(text)))

def count_chinese_demo2():
#     中文文本特征抽取   自动分词
      data =["少时诵诗书所所所所丰富创新型",
             "伺服电机寻或错过过过过过过过过过",
             "爱何辜大V阿深V次氯酸钠计算出吧看啥迟迟不你"]
      # 将中文文本进行分离
      data_new=[]
      for sent in data:
          data_new.append(cut_word(sent) )
      # 1、实例化一个转换器类
      transfer = CountVectorizer()
      # 2、调用fit_transform
      data_final= transfer.fit_transform(data_new)
      print("data_new:\n", data_final.toarray())
      print("特征名字:\n", transfer.get_feature_names_out())
      return None

def tfidf_demo2():
#     中文文本特征抽取   自动分词
      data =["少时诵诗书所所所所丰富创新型",
             "伺服电机寻或错过过过过过过过过过",
             "爱何辜大V阿深V次氯酸钠计算出吧看啥迟迟不你"]
      # 将中文文本进行分离
      data_new=[]
      for sent in data:
          data_new.append(cut_word(sent) )
      # 1、实例化一个转换器类
      transfer = TfidfVectorizer()
      # 2、调用fit_transform
      data_final= transfer.fit_transform(data_new)
      print("data_new:\n", data_final.toarray())
      print("特征名字:\n", transfer.get_feature_names_out())
      return None

def minmax_demo():
#     归一化
#     1、获取数据
      data = pd.read_csv("dating.txt")
      # 前三列数据
      data = data.iloc[:,:3]
      print(data)
      # 2、实例化一个转换器
      transfer = MinMaxScaler()
      # 3、调用fit_transform
      data_new = transfer.fit_transform(data)
      print(data_new)
      return None


def stand_demo():
#     标准化
#     1、获取数据
      data = pd.read_csv("dating.txt")
      # 前三列数据
      data = data.iloc[:,:3]
      print(data)
      # 2、实例化一个转换器
      transfer = StandardScaler()
      # 3、调用fit_transform
      data_new = transfer.fit_transform(data)
      print(data_new)
      return None


if __name__ == '__main__':
    # datasets_demo()
    # dict_demo()
    # count_demo()
    # count_chinese_demo()
    # count_chinese_demo2()
    # cut_word("我爱北京天安门")
    # tfidf_demo2()
    # minmax_demo()
    stand_demo()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值