人工智能_2_特征处理.py

# 特征处理
# 特征预处理:通过统计方法将数据转换为算法需要的数据
# 数值型数据:标准缩放
#           规依法,标准化(常用,适用于当前大数据),缺失值处理(删除,填补中位数平均数,通常按照列填补)
# 类别型数据: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()

 

posted @ 2019-09-27 14:12  下雨天,真好  阅读(306)  评论(0编辑  收藏  举报