# 特征处理 # 特征预处理:通过统计方法将数据转换为算法需要的数据 # 数值型数据:标准缩放 # 规依法,标准化(常用,适用于当前大数据),缺失值处理(删除,填补中位数平均数,通常按照列填补) # 类别型数据:ont-hot编码 # 时间类型:时间的切分 # 特征处理API sklearn.preprocessing # ============================================== # 归一化:对数据变化--->默认[0,1]之间 """ new = (old-min)/(max-min) max,min 为某列最大值最小值 new2 = new*(mx-mi)+mi mx mi 为指定的区间默认 new2 即为转换后的值 MinScalar(feature_range=(0,1)...) 缩放函数 """ # 当数据的n个特征同等重要的时候,要进行归一化, # 使得某一个特征对最终结果不会造成更大的影响(其实主要与算法有关,) # 容易受异常点影响,容易更改max,min的值 from sklearn.preprocessing import MinMaxScaler matrix = [ [90,2,10,9000], [60,4,15,45], [75,3,13,46], ] def mm(): """ 归一化处理 :return: """ mms = MinMaxScaler(feature_range=(2,3)) data = mms.fit_transform(matrix) print(data) """ [[3. 2. 2. 2. ] [2. 3. 3. 2.83333333] [2.5 2.5 2.6 3. ]] """ # ================================================ # 标准化(常用):使得某一特征不会对结果造成太大影响 # new=(old-平均)/标准差 对每一列来说 # 标准差 = 方差开平方 # 方差:考量数据的稳定性 # 处理后每个特征平均为0,方差为1,标准差为1 from sklearn.preprocessing import StandardScaler def ss(): s = StandardScaler() data = s.fit_transform(matrix) print(data) # ======================================= from sklearn.preprocessing import Imputer # 填补NaN, 按照 mean, 列填补 # 数据中的缺失值要为 numpy.nan 类型 若不是 replace() 替换掉 import numpy as np [[90, 2, 10, 9000], [np.nan, 4, 15, 45],] Imputer(missing_values="NaN",strategy="mean",axis=0) Imputer(missing_values="nan",strategy="mean",axis=0) # ====================================================== # 数据降维(注意不是数组的行数,列数) 指的是减少特征的数量 # 主要方法:特征选择,主成分分析 # 特征选择的原因:冗余,噪音 # 方式: # 过滤式(主要过滤方差),例如方差为0的,或很小的 就可以过滤 # 嵌入式(正则化,决策树), # 包裹式 # 神经网络 from sklearn.feature_selection import VarianceThreshold def var(): vt = VarianceThreshold(threshold=0.0) # threshold 根据情况获取 data = vt.fit_transform([ [0,2,0,3], [0,1,4,3], [0,1,1,3], ]) print(data) """ [[2 0] # 去掉了方差为0的列 [1 4] [1 1]] """ # 主成分分析 from sklearn.decomposition import PCA # PCA 分析,简化数据集的技术, 使数据压缩,减少数据维数(特征数量), 损失少量数据 # 特征数量过多的时候,考虑要不要使用使用PCA,(图片可能有上万个特征) # 特征数量很少的时候,可以不使用 # PCA(n_components=) n_components # 小数:指定保留的信息量 0-1之间 一般为0.90-0.95之间 # 整数:指定减少的特征数量(但自己通常不知道减少多少,因此不常使用) def pca(): """ 主成分分析 :return: """ pc=PCA(n_components=0.92) data = pc.fit_transform([ [2,8,4,5], [6,3,0,8], [5,4,9,1], ]) print(data) """ [[ 1.28620952e-15 3.82970843e+00] [ 5.74456265e+00 -1.91485422e+00] [-5.74456265e+00 -1.91485422e+00]] """ # ======================================================================= # 数据降维案例:用户对物品类别的喜好程度细分降维 # 数据:https://www.kaggle.com/c/instacart-market-basket-analysis/data # products.csv:商品信息 # order_products_prior.csv:订单与商品信息 # orders.csv:用户订单信息 # aisles.csv:商品所属具体物品类别 # 首先表合并 import pandas as pd data = pd.read_csv("E:\data\example\orders.csv") print(data.head(10)) # data2 = pd.read_csv("") # new=pd.merge(data2,data2,on=['product_id','product_id']) # 合并 两张表 on 表示以那个键合并 # 可再次合并 # ----------- # 交叉表(特殊的分组工具) cross = pd.crosstab(data['user_id'],data['type']) # 第一个是行数据,第二个是列数据 # 第一列 为 user_id ,第一行为 物品类型 # 然后是 每个 user 买的各种物品的数量 # 显示了 用户 与他买的物品种类个数之间的关系 # 可使用pca降维 去掉无关项, 然后给算法使用 if __name__=="__main__":pass # mm() # ss() # var() # pca()