PythonML-Day01: sklearn

ML-Day01

1.机器学习的数据大多都是文件,比如csv文件

2.Pandas: 读取数据工具 基本的数据处理

3.缺失值: 数据转换

4.重复值: 不需要去重

5.sklearn: 对于特征数据提供了强大的支持
    - Python的机器学习工具
    - 许多知名的机器学习算法的实现
    - 文档完善,容易上手,丰富的API

6.特征工程: 将原始数据转换为 能更好的代表预测模型特征的过程,从而
    - 提高对未知数据预测的准确性

7.特征工程直接影响预测结果

8.特征抽取: 将具体数据转换成具体的特征数值,进行特征值化【为了计算机更高的识别】

9.特征抽取 - 字典: from sklearn.feature_extraction import DictVectorizer:
    - 传入一个可迭代的字典数组,返回一个one-hot 编码 的特征矩阵
    - 对字典数据进行特征值化
    - 把字典中某些类别的数据转换成特征值,比如字符串
    - one-hot 编码:

10.特征抽取 - 文本 [CountVectorizer]: sklearn.feature_extraction.text.CountVectorizer
    - 传入一个可迭代的文本[字符串]数组,返回一个one-hot 编码 的特征矩阵
    - 针对传入列表文章中所有出现的词,重复的只看做一次,整理出新的词频列表
    - 对每个词,在数组的每个元素[每篇文章]中是否出现以及次数,用0/1/2 表示
    - 单个字母不参与统计
    - 对于中文,使用jieba 分词 import jieba  jieba.cut("")

11.特征抽取 - 文本 [TfidfVectorizer]:from sklearn.feature_extraction.text import TfidfVectorizer
    - 如果某个词或者短语在一篇文章中出现的概率高,词频大,并且在其他文章中很少出现
    - 则说明这个词适合作为分类的依据
    - tf-idf 用来评估一个字词对于一个文件集中的某一个文件的重要程度
    - tf:词频 term frequencey
    - idf: 逆文档频率 log(总文档数量/该词出现的文档数量)
    - 重要性 = tf * idf

12.数据预处理
    - 通过特定的统计方法(数学方法),将数值型数据转换成算法要求的数据

13.数据预处理 - 归一化:from sklearn.preprocessing import MinMaxScaler
    - 多个特征同等重要的时候,需要进行归一化
    - 因为不同特征的数值大小肯定不一样,有的单位是1000,有的单位是0.1
    - 所以,要将这些数据统一到一个相同的固定的区间上,这就是归一化
    - 通过对原始数据进行变换 把数据映射到[默认0/1之间]
    - 公式: X` = x - min / max -min  X`` = X` * (mx - mi) + mi
    - max 指 每一列的最大值
    - min 指 每一列的最小值
    - X`` 为最终结果
    - [mx,mi] 为归一化区间端点,默认为[0,1]
    - MinMaxScalar.fit_transform(X)
    - X :numpy array 格式的数据[n_samples, n_features]
    - 返回转换后的形状相同的array
    - 缺点:异常点对最大值最小值影响很大,所以,归一化对于异常点的处理稍弱
    - 鲁棒性较差[稳定性]
    - 只适合传统的精确小数据场景

14.数据预处理 - 标准化:from sklearn.preprocessing import StandardScaler
    - 通过对原始数据进行变换,把原始数据变换到 均值为0,标准差为1 的范围内
    - 公式: X` = x - mean / &
    - 公式说明: 对于每一列,mean 为均值, & 为保准差
    - & = var[方差] ^ 0.5
    - var[方差] = ((x1 - mean)^2 + ... +(xn - mean)^2) / n[样本数]
    - 方差是考量数据稳定性的标识
    - 出现异常点,影响不是很大
    - 适合现代嘈杂大数据场景
    - 在已有样本非常多的情况下稳定

15.数据预处理 - 处理缺失值:插值
    - Imputer(missing_values='NaN',strategy='mean',axis=0)
    - Imputer.fit_transform(X)
    - X numpy array 格式的数据
    - 返回值: 转换后形状相同的Array
    - 缺失值必须是 np.nan格式, 属于float类型

16.数据降维
    - 维:特征值的数量
    - 特征选择 / 主成分分析

17.数据降维 - 特征选择
    - 为什么?
        - 1.冗余 - 部分特征,相似性高,容易消耗计算性能
        - 2.噪声 - 部分特征对预测结果有影响
    - 特征选择 就是单纯的从提取到的所有的特征中,选择部分特征作为训练集特征
    - 主要方法
        - 过滤式:通过方差去过滤
        - 嵌入式: 正则化、决策树
        - 包裹式
        - 神经网络

18.特征选择 - 方差过滤: from sklearn.feature_selection import VarianceThreshold
    - 删除所有低方差的特征
    - VarianceThreshold(threshold = 0.0)
    - variance.fit_transform(x)
    - x : 输入,np array 数据
    - threshold 方差阈值
    - 返回值:训练集差异低于阈值的特征列将被删除
    - 默认保留所有非零方差(完全一样)的特征列

19.数据降维 - 主成分分析PCA
    - PCA 是一种分析、简化数据的技术
    - 数据维数压缩、尽可能降低元数据的特征数量[复杂度],损失少量信息
    - 作用:可以削减回归分析或者聚类分析中特征的数量
    - 使用前提: 当你的数据特征数量达到上百的时候,考虑数据简化
    - 结果: 特征数量减少,数据也会发生改变
    - PCA(n_components = None)
    - n_components 损失系数(0-1): 一般为90% - 95%, 即损失0-5%
    - pca.fit_transform(x) -- 输入array, 返回转换后减少纬度的数据array


20.源码(一)
    import jieba
    from sklearn.feature_extraction import DictVectorizer
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.preprocessing import MinMaxScaler
    from sklearn.preprocessing import StandardScaler
    from sklearn.feature_selection import VarianceThreshold
    from sklearn.decomposition import PCA
    import pandas


    def dic():
        """
        字典数据抽取 DictVectorizer
        :return: sparse矩阵
        """
        # 字典数据
        dit_data = [{'city': '北京', 'temp': 100},
                    {'city': '广州', 'temp': 70},
                    {'city': '深圳', 'temp': 90}]
        # 实例化一个转换器
        dit = DictVectorizer()
        # 调用fit_transform 转换方法
        data = dit.fit_transform(dit_data)
        # get_featurenames
        print(dit.get_feature_names())
        # inverse_transform
        print(dit.inverse_transform(data))


    def cut_word():
        con1 = jieba.cut("生活如酒,或芳香,或浓烈,因为诚实,它变得醇厚;生活如歌,或高昂,或低沉,因为守信,它变得悦耳; 生活如画,或明丽,或素雅,因为诚信,它变得美丽")
        con2 = jieba.cut("若能掬起一捧月光,我选择最柔和的;若能采来香山红叶,我选择最艳丽的;若能摘下满天星辰,我选择最明亮的。也许你会说,我的选择不是最好,但我的选择,我相信")
        con3 = jieba.cut("当三闾大夫抱着石头与江水相拥,当西楚霸王自刎时的鲜血染红了整片夕阳!")
        c1 = " ".join(con1)
        c2 = " ".join(con2)
        c3 = " ".join(con3)
        return c1, c2, c3


    def countVec():
        """
        对文本进行特征值化
        :return:
        """
        c1, c2, c3 = cut_word()
        dt = [c1, c2, c3]
        cv = CountVectorizer()
        data = cv.fit_transform(dt)
        print(cv.get_feature_names())
        print(data.toarray())


    def tfidfVec():
        """
        tfidf 文本特征值化
        :return:
        """
        c1, c2, c3 = cut_word()
        dt = [c1, c2, c3]
        tf = TfidfVectorizer()
        data = tf.fit_transform(dt)
        print(tf.get_feature_names())
        print(data.toarray())


    def minMaxScalar():
        """
        对二维数组数据进行归一化处理
        :return:
        """
        dt = [[90, 2, 10, 40],
                [60, 4, 15, 45],
                [75, 3, 13, 46]]
        mm = MinMaxScaler(feature_range=(2, 3))
        data = mm.fit_transform(dt)
        print(data)

    def standardScalar():
        """
        对二维数组数据进行标准化处理
        :return:
        """
        dt = [[1, -1, 3],
              [2, 4, 2],
              [4, 6, -1]]
        sd = StandardScaler()
        data = sd.fit_transform(dt)
        print(data)

    def variance():
        """
        方差过滤
        :return:
        """
        dt = [[0, 2, 0, 3],
              [0, 1, 4, 3],
              [0, 1, 1, 3]]
        var = VarianceThreshold(threshold=0.1)
        data = var.fit_transform(dt)
        print(data)


    def pca():
        """
        特征降维 - PCA主成分分析
        :return:
        """
        dt = [[2, 8, 4, 5],
              [6, 3, 0, 8],
              [5, 4, 9, 1]]
        pca = PCA(n_components=0.9)
        data = pca.fit_transform(dt)
        print(data)


    if __name__ == '__main__':
        pca()


21.源码(二) - PCA降维
    #!/usr/bin/env python
    # coding: utf-8
    from sklearn.decomposition import PCA
    import pandas as pd

    # 读取四张表的数据
    prior = pd.read_csv("./KaggleData/order_products__prior.csv")

    products = pd.read_csv("./KaggleData/products.csv")

    orders = pd.read_csv("./KaggleData/orders.csv")

    aisles = pd.read_csv("./KaggleData/aisles.csv")

    # 合并4张表到一张表
    _mg = pd.merge(prior, products, on=['product_id', 'product_id'])
    _mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
    mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

    mt.head(10)

    # 交叉表 -- 特殊的分组工具
    cross = pd.crosstab(mt['user_id'], mt['aisle'])

    # 进行主成分分析,进行降维操作
    pca = PCA(n_components=0.9)
    data = pca.fit_transform(cross)

    data.shape







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值