首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >人工智能_2_特征处理.py

人工智能_2_特征处理.py

作者头像
Dean0731
发布2020-05-08 15:35:38
2760
发布2020-05-08 15:35:38
举报
文章被收录于专栏:blog-技术博客blog-技术博客
# 特征处理
# 特征预处理:通过统计方法将数据转换为算法需要的数据
# 数值型数据:标准缩放
#           规依法,标准化(常用,适用于当前大数据),缺失值处理(删除,填补中位数平均数,通常按照列填补)
# 类别型数据: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()
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档