机器学习(一)

思维导图

机器学习(一).png

机器学习概述

1.1 人工智能概述
    达特茅斯会议-人工智能的起点
    机器学习是人工智能的一个实现途径
    深度学习是机器学习的一个方法发展而来
    1.1.2 机器学习、深度学习能做些什么
        传统预测
        图像识别
        自然语言处理
1.2 什么是机器学习
    数据
    模型
    预测
    从历史数据当中获得规律?这些历史数据是怎么的格式?
    1.2.3 数据集构成
        特征值 + 目标值
1.3 机器学习算法分类
    监督学习
        目标值:类别 - 分类问题
            k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归
        目标值:连续型的数据 - 回归问题
            线性回归、岭回归
    目标值:无 - 无监督学习
        聚类 k-means
    1、预测明天的气温是多少度? 回归
    2、预测明天是阴、晴还是雨? 分类
    3、人脸年龄预测? 回归/分类
    4、人脸识别? 分类
1.4 机器学习开发流程
    1)获取数据
    2)数据处理
    3)特征工程
    4)机器学习算法训练 - 模型
    5)模型评估
    6)应用
1.5 学习框架和资料介绍
    1)算法是核心,数据与计算是基础
    2)找准定位
    3)怎么做?
        1、入门
        2、实战类书籍
        3、机器学习 -”西瓜书”- 周志华
           统计学习方法 - 李航
           深度学习 - “花书”
    4)1.5.1 机器学习库与框架

特征工程

2.1 数据集
    2.1.1 可用数据集
        公司内部 百度
        数据接口 花钱
        数据集
        学习阶段可以用的数据集:
            1)sklearn
            2)kaggle
            3)UCI 
            4)  天池
        1 Scikit-learn工具介绍
    2.1.2 sklearn数据集
        sklearn.datasets
            load_*  获取小规模数据集
            fetch_* 获取大规模数据集
            2 sklearn小数据集
                sklearn.datasets.load_iris()
            3 sklearn大数据集
                sklearn.datasets.fetch_20newsgroups(data_home=None,subset=‘train’)
            4 数据集的返回值
                datasets.base.Bunch(继承自字典)
                    dict["key"] = values
                    bunch.key = values
        >    思考:拿到的数据是否全部都用来训练一个模型?
    2.1.3 数据集的划分
        训练数据:用于训练,构建模型
        测试数据:在模型检验时使用,用于评估模型是否有效
            测试集 20%~30%
            sklearn.model_selection.train_test_split(arrays, *options)
            训练集特征值,测试集特征值,训练集目标值,测试集目标值
            x_train, x_test, y_train, y_test
2.2 特征工程介绍
    算法 特征工程
    2.2.1 为什么需要特征工程(Feature Engineering)
    2.2.2 什么是特征工程
        sklearn 特征工程
        pandas 数据清洗、数据处理
            特征抽取/特征提取
                机器学习算法 - 统计方法 - 数学公式
                    文本类型 -》 数值
                    类型 -》 数值
                2.3.1 特征提取
                    sklearn.feature_extraction
                2.3.2 字典特征提取 - 类别 -> one-hot编码
                    sklearn.feature_extraction.DictVectorizer(sparse=True,…)
                    vector 数学:向量 物理:矢量
                        矩阵 matrix 二维数组
                        向量 vector 一维数组
                    父类:转换器类
                    返回sparse矩阵
                        sparse稀疏
                            将非零值 按位置表示出来
                            节省内存 - 提高加载效率
                    应用场景:
                        1)pclass, sex 数据集当中类别特征比较多
                            1、将数据集的特征-》字典类型
                            2、DictVectorizer转换
                        2)本身拿到的数据就是字典类型
                 2.3.3 文本特征提取
                    单词 作为 特征
                    句子、短语、单词、字母
                    特征:特征词
                    方法1:CountVectorizer
                        统计每个样本特征词出现的个数
                        stop_words停用的
                        停用词表
                    关键词:在某一个类别的文章中,出现的次数很多,但是在其他类别的文章当中出现很少
                    方法2:TfidfVectorizer
                        TF-IDF - 重要程度
                        两个词 “经济”,“非常”
                        1000篇文章-语料库
                        100篇文章 - "非常"
                        10篇文章 - “经济”
                        两篇文章
                        文章A(100词) : 10次“经济” TF-IDF:0.2
                            tf:10/100 = 0.1
                            idf:lg 1000/10 = 2
                        文章B(100词) : 10次“非常” TF-IDF:0.1
                            tf:10/100 = 0.1
                            idf: log 10 1000/100 = 1
                        TF - 词频(term frequency,tf)
                        IDF - 逆向文档频率

            特征预处理
                2.4.1 什么是特征预处理
                为什么我们要进行归一化/标准化?
                    无量纲化
                    2.4.2 归一化
                        异常值:最大值、最小值
                    2.4.3 标准化
                        (x - mean) / std
                        标准差:集中程度
                        应用场景:
                        在已有样本足够多的情况下比较稳定,适合现代嘈杂大数据场景。

            特征降维
                2.5.1 降维 - 降低维度
                    ndarray
                        维数:嵌套的层数
                        0维 标量
                        1维 向量
                        2维 矩阵
                        3维
                        n维
                    二维数组
                        此处的降维:
                        降低特征的个数
                        效果:
                        特征与特征之间不相关
                2.5.1 降维
                    特征选择
                        Filter过滤式
                            方差选择法:低方差特征过滤
                            相关系数 - 特征与特征之间的相关程度
                                取值范围:–1≤ r ≤+1
                                皮尔逊相关系数
                                0.9942
                                特征与特征之间相关性很高:
                                    1)选取其中一个
                                    2)加权求和
                                    3)主成分分析
                        Embeded嵌入式
                            决策树 
                            正则化 
                            深度学习
                    主成分分析
                        2.6.1 什么是主成分分析(PCA)
                            sklearn.decomposition.PCA(n_components=None)
                            n_components
                                小数 表示保留百分之多少的信息
                                整数 减少到多少特征
                        2.6.2 案例:探究用户对物品类别的喜好细分
                            用户          物品类别
                            user_id         aisle
                            1)需要将user_id和aisle放在同一个表中 - 合并
                            2)找到user_id和aisle - 交叉表和透视表
                            3)特征冗余过多 -> PCA降维

初步代码

# 数据集导入
from sklearn.datasets import load_iris
# 数据集划分
from sklearn.model_selection import train_test_split
# 特征工程抽取 字典
from sklearn.feature_extraction import DictVectorizer
# 特征工程抽取 文本 CountVectorizer 词频 TfidfVectorizer TfidfVectorizer Tfidf
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
# 特征工程预处理 MinMaxScaler归一化 指定区间 StandardScaler标准化
from sklearn.preprocessing import MinMaxScaler, StandardScaler
# 特征选择 VarianceThreshold 方差降维 threshold 指定阈值
from sklearn.feature_selection import VarianceThreshold
# 特征降维 PCA n_components 小数 保留占比的信息 ,整数保留列的特征数
from sklearn.decomposition import PCA
# 代数计算
from scipy.stats import pearsonr
# 分词
import jieba
import pandas as pd


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

    # 数据集划分 test_size 测试集占比 random_state 随机种子固定
    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():
    """
    字典特征抽取
    :return:
    """
    data = [{'city': '北京', 'temperature': 100}, {'city': '上海', 'temperature': 60}, {'city': '深圳', 'temperature': 30}]
    # 1、实例化一个转换器类 sparse=True 默认 稀疏矩阵
    transfer = DictVectorizer(sparse=True)

    # 2、调用fit_transform()
    data_new = transfer.fit_transform(data)
    # 若有sparse参数,sparse=False 显示详细矩阵信息 ,若无sparse参数 toarray()显示
    print("data_new:\n", data_new, type(data_new))
    # print("data_new:\n", data_new.toarray(), type(data_new))
    print("特征名字:\n", transfer.get_feature_names())

    return None


def count_demo():
    """
    文本特征抽取:CountVecotrizer
    :return:
    """
    data = ["life is short,i like like python", "life is too long,i dislike python"]
    # 1、实例化一个转换器类 stop_words 停表用词 无意义的词 无sparse参数
    transfer = CountVectorizer(stop_words=["is", "too"], )

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def count_chinese_demo():
    """
    中文文本特征抽取:CountVecotrizer
    :return:
    """
    # 中文无法自动按词分词
    data = ["我爱北京天安门", "天安门上太阳升"]
    # 手动分词
    # 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())

    return None


def cut_word(text):
    """
    进行中文分词:"我爱北京天安门" --> "我 爱 北京 天安门"
    :param text:
    :return:
    """
    # 返回一个生成器,list()强转.join成字符串
    return " ".join(list(jieba.cut(text)))


def count_chinese_demo2():
    """
    中文文本特征抽取,自动分词
    :return:
    """
    # 将中文文本进行分词
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类 停表 无用词
    transfer = CountVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def tfidf_demo():
    """
    用TF-IDF的方法进行文本特征抽取
    :return:
    """
    # 将中文文本进行分词
    data = ["一种还是一种今天很残酷,明天更残酷,后天很美好,但绝对大部分是死在明天晚上,所以每个人不要放弃今天。",
            "我们看到的从很远星系来的光是在几百万年之前发出的,这样当我们看到宇宙时,我们是在看它的过去。",
            "如果只用一种方式了解某样事物,你就不会真正了解它。了解事物真正含义的秘密取决于如何将其与我们所了解的事物相联系。"]

    data_new = []
    for sent in data:
        data_new.append(cut_word(sent))
    # print(data_new)
    # 1、实例化一个转换器类
    transfer = TfidfVectorizer(stop_words=["一种", "所以"])

    # 2、调用fit_transform
    data_final = transfer.fit_transform(data_new)
    print("data_new:\n", data_final.toarray())
    print("特征名字:\n", transfer.get_feature_names())

    return None


def minmax_demo():
    """
    无量纲化 归一化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类 feature_range 指定区间范围,
    transfer = MinMaxScaler(feature_range=[2, 3])

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)

    return None


def stand_demo():
    """
    标准化
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("dating.txt")
    # 数据若只有一列无字段名不会导入,这列不会导入进来
    data = data.iloc[:, :3]
    print("data:\n", data)

    # 2、实例化一个转换器类
    transfer = StandardScaler()

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None


def variance_demo():
    """
    过滤低方差特征
    :return:
    """
    # 1、获取数据
    data = pd.read_csv("factor_returns.csv")
    data = data.iloc[:, 1:-2]
    print("data:\n", data)

    # 2、实例化一个转换器类 threshold设定阈值
    transfer = VarianceThreshold(threshold=10)

    # 3、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new, data_new.shape)

    # 计算某两个变量之间的相关系数 (r值,p值) p值越小越好<0.01 非常好,<0.05好
    r1 = pearsonr(data["pe_ratio"], data["pb_ratio"])
    print("相关系数:\n", r1)
    r2 = pearsonr(data['revenue'], data['total_expense'])
    print("revenue与total_expense之间的相关性:\n", r2)

    return None


def pca_demo():
    """
    主成分分析法 PCA降维
    :return:
    """
    data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]

    # 1、实例化一个转换器类 n_components 小数保留95的信息,整数保留列的特征数
    transfer = PCA(n_components=0.95)

    # 2、调用fit_transform
    data_new = transfer.fit_transform(data)
    print("data_new:\n", data_new)
    return None


if __name__ == "__main__":
    # 代码1:sklearn数据集使用
    datasets_demo()
    # 代码2:字典特征抽取
    # dict_demo()
    # 代码3:文本特征抽取:CountVecotrizer
    # count_demo()
    # 代码4:中文文本特征抽取:CountVecotrizer
    # count_chinese_demo()
    # 代码5:中文文本特征抽取,自动分词
    # count_chinese_demo2()
    # 代码6:中文分词
    # print(cut_word("我爱北京天安门"))
    # 代码7:用TF-IDF的方法进行文本特征抽取
    # tfidf_demo()
    # 代码8:归一化
    # minmax_demo()
    # 代码9:标准化
    # stand_demo()
    # 代码10:低方差特征过滤
    # variance_demo()
    # 代码11:PCA降维
    # pca_demo()

案例

# 1、获取数据
# 2、合并表
# 3、找到user_id和aisle之间的关系
# 4、PCA降维

import pandas as pd

# 1、获取数据
order_products = pd.read_csv("./instacart/order_products__prior.csv")
products = pd.read_csv("./instacart/products.csv")
orders = pd.read_csv("./instacart/orders.csv")
aisles = pd.read_csv("./instacart/aisles.csv")

# 2、合并表
# order_products__prior.csv:订单与商品信息

# 字段:order_id, product_id, add_to_cart_order, reordered
# products.csv:商品信息
# 字段:product_id, product_name, aisle_id, department_id
# orders.csv:用户的订单信息
# 字段:order_id,user_id,eval_set,order_number,….
# aisles.csv:商品所属具体物品类别
# 字段: aisle_id, aisle

# 合并aisles和products aisle和product_id
tab1 = pd.merge(aisles, products, on=["aisle_id", "aisle_id"])

tab2 = pd.merge(tab1, order_products, on=["product_id", "product_id"])

tab3 = pd.merge(tab2, orders, on=["order_id", "order_id"])

tab3.head()

# 3、找到user_id和aisle之间的关系
table = pd.crosstab(tab3["user_id"], tab3["aisle"])

data = table[:10000]

# 4、PCA降维
from sklearn.decomposition import PCA

# 1)实例化一个转换器类
transfer = PCA(n_components=0.95)

# 2)调用fit_transform
data_new = transfer.fit_transform(data)

data_new.shape
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343