监督学习(有目标值,输入数据有特征有标签,即有标准答案)
            1、分类算法(其目标值是类别)
            2、回归算法(其目标值是连续型的数据)
无监督学习(无目标值,输入数据有特征无标签,即无标准答案)
            1、聚类算法

三、分类算法
    3.1sklearn转换器与预估器
        3.1.1转换器(特征工程的父类)
            1、特征工程的实操步骤:
                1)实例化(实例化的是一个转换器类(Transformer))
                2)调用fit_transform(对于文档建立分类词频矩阵,不能同时调用)
            2、将特征工程的接口称为转换器,转换器有以下几种形式:
                1)fit_transform
                2)fit
                3)transform
            3、例子
                标准化    X' = (x - mean) / std
                day1.py中的stand_demo()
                fit_transform()中的运行细节:
                    1)fit()    计算 每一列的平均值、标准差
                    2)transform()    带入公式X'进行最终的 转换
        3.1.2估计器(sklearn机器学习算法的实现)
            1、估计器(estimator)是一类实现了算法的API
                1)用于分类的估计器
                    sklearn.neighbors    K-近邻算法
                    sklearn.naive_bayes    贝叶斯
                    sklearn.linear_model.LogisticRegression    逻辑回归
                    sklearn.tree    决策树与随机森林
                2)用于回归的估计器
                    sklearn.linear_model.LinearRegression    线性回归
                    sklearn.linear_model.Ridge    岭回归
                3)用于无监督学习的估计器    
                    sklearn.cluster.KMeans    聚类
            2、估计器工作流程
                输入训练集(x_train, y_train)和测试集(x_test, y_test)作为参数
                1)实例化一个estimator
                2)生成模型(用训练集):
                    estimator.fit(x_train, y_train)进行计算,调用完毕时模型生成
                3)模型评估(用测试集):
                        法一:直接比对真实值和预测值
                            真实值y_test
              预测值y_predict = estimator.predict(x_test)
              比对y_test == y_predict,结果为true/false
              法二:计算准确率
              accuracy = estimator.score(x_test, y_test)
    3.2K-近邻算法(KNN)
        3.2.1 什么是K-近邻算法
            1、参数K;最近的N;邻居N
                1)算法核心思想:根据你"邻居"的类别来判断你的类别
                2)算法原理
                    定义:若一个样本在特征空间中的K个最相似(即最近邻)的样本中的大多数属于某一类别,则该样本也属于该类别
                    距离公式:
                        欧氏距离(常用)
            曼哈顿距离(绝对值距离)
            明可夫斯基距离
            2、电影类型分析
            3、问题
                1)如果取的最近的电影数量不一样?会是什么结果?
                        k 值取得过小,容易受到异常点的影响
            k 值取得过大,样本不均衡的影响
        2)结合前面的约会对象数据,分析K-近邻算法需要做什么样的处理?
                使用标准化方法进行无量纲化处理
        3.2.2    KNN-API
            sklearn.neighbors.KNeighborsClassifier(n_neighbors=5,algorithm='auto')
                n_neighbors:k值,即查询使用的邻居数,可选,int,默认=5。
                algorithm:{"auto","ball_tree","kd_tree","brute"},不同实现方式影响效率;
                                    默认auto,将根据传递给fit()的值来确定最合适的算法。
        3.2.3 案例1:鸢尾花种类预测
            1、获取数据
      2、数据集划分
      3、特征工程之标准化
      4、KNN估计器工作流程之生成模型
      5、KNN估计器工作流程之模型评估
        3.3.4    K-近邻总结
            1、优点:简单,易于理解,易于实现,无需训练
      2、缺点:
          1)必须指定K值,K值选择不当则分类精度不能保证
          2)懒惰算法,对测试样本分类时的计算量大,内存开销大
      3、使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试
    3.3模型选择与调优
        3.3.1 什么是交叉验证(cross validation)
            交叉验证:将训练集再分为新训练集和验证集。
            1、数据=训练集+测试集
            2、为让从训练得到的模型结果更加准确,做以下处理:
                1)训练集:新训练集+验证集
                2)测试集:原测试集
            3、例子-3折交叉验证
                1)将训练集分成三份,其中一份作为验证集,其余两份作为新训练集。
                     经过三次(组)测试,每次都更换不同的验证集。
                     得到三组模型的结果,取平均值作为最终结果。
                2)模型一:训练集=验证集    + 新训练集1 + 新训练集2 ;准确率=80%
                     模型二:训练集=新训练集1 + 验证集    + 新训练集2 ;准确率=90%
                     模型三:训练集=新训练集1 + 新训练集2 + 验证集    ;准确率=70%
                   最终模型:训练集;准确率=(80+90+70)/3=80%
        3.3.2 超参数搜索-网格搜索(Grid Search)
            1、通常情况下,有很多参数是需要手动指定的(例如KNN种的K值),这种称为超参数。
                因为手动过程繁杂,所以需要对模型预设几种超参数组合。
                每组超参数都采用交叉验证来评估。最终选出最优参数组合建立模型。
            2、模型选择与调优API
                sklearn.model_selection.GridSearchCV(estimator,param_grid=None,cv=None)
                    1)作用:对估计器的指定参数进行详尽搜索
                    2)参数:
                        estimator:估计器对象
                        param_grid:估计器参数,dict字典类型,例如想让K值取1、3、5则{"n_heighbors":[1,3,5]}
                        cv:指定几折交叉验证,常用10折
                    3)调用方法:
                        fit():输入训练数据(生成子模型)
                        score():求出准确率(子模型评估)
                    4)结果分析(调用属性查看):
                        best_params_:最佳参数
                        best_score_:最佳结果
                        best_estimator_:最佳估计器
                        cv_results_:交叉验证结果
        3.3.3 鸢尾花案例增加K值调优
        3.3.4 案例:预测facebook签到位置
            流程分析:
                1、获取数据
                2、数据处理
                    1)目的:特征值X+目标值Y
                    2)数据:
                        FBlocation/train.csv:[29118021 rows x 6 columns]
                            a.原数据量太大,为节省时间,以地理位置x&y为基准缩小数据范围为2 < x < 2.5 & 1.0 < y < 1.5
                            b.原数据time时间特征为时间戳格式,例如470702,无明显意义,要处理为有意义的年月日时分秒
                            c.过滤签到次数少的地点
                    3)数据集划分
                3、特征工程-标准化
                4、KNN算法预估流程
                5、模型选择与调优
                6、模型评估
    3.4朴素贝叶斯算法
        3.4.1什么是朴素贝叶斯
            朴素 + 贝叶斯
        3.4.2概率(Probability)基础
            P(喜欢)=4/7,P(不喜欢)=3/7
        3.4.3联合概率&条件概率&相互独立
            1、联合概率:包含多个条件,且所有条件同时成立的概率
                记作:P(A,B)
                例如:P(程序员,匀称)=1/7,P(程序员,超重|喜欢)=1/4    
            2、条件概率:事件A在另一事件B已发生条件下的发生概率
                记作:P(A|B)
                例如:P(程序员|喜欢)=2/4=1/2,P(程序员,超重|喜欢)=1/4
            3、相互独立:P(A,B)=P(A)P(B) <==> 事件A与事件B相互独立
        3.4.4贝叶斯公式
            1、P(C|W)=P(W|C)P(C)/P(W)
                W为给定文档的特征值(频数统计,预测文档提供),C为文档类别
            2、何为朴素?
          即假设特征与特征之间是相互独立的,即P(A,B)=P(A)P(B)
        3.4.5API
            sklearn.naive_bayes import MultinomialNB(alpha=1.0)
                参数:alpha是拉普拉斯平滑系数,默认为1,目的是防止计算出的分类概率为0
        3.4.6案例:20类新闻分类
            1)获取数据
      2)划分数据集
      3)特征工程-文本特征抽取
      4)朴素贝叶斯预估器流程
      5)模型评估
        3.4.7朴素贝叶斯总结
            1、应用场景:
        文本分类
        单词作为特征
      2、优点:
          1)该算法源于古典数学理论,有稳定的分类效率。
          2)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
          3)分类准确度高,速度快。
      3、缺点(特点):
          由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好。
    3.5决策树
        3.5.1认识决策树
            如何高效的进行决策?
      特征的先后顺序
        3.5.2决策树分类原理
            1、信息论
        1)信息
            香农:消除随机不定性的东西
            小明 年龄 “我今年18岁” - 信息
            小华 ”小明明年19岁” - 不是信息
        2)信息的衡量-信息量
            信息熵(H或Ent表示),单位是bit
                    ....
            2、类型
                1)ID3    信息增益 最大原则
                2)C4.5 信息增益率 最大原则
                3)CART 基尼系数 最小原则
        3.5.3API
            sklearn.tree.DecisionTreeClassifier(criterion="gini",max_depth=None,random_state=None)
                1)作用:决策树分类器
                2)参数:
                    criterion:特征选择标准:"gini"或者"entropy",前者代表基尼系数,后者代表信息增益。默认"gini",即CART算法。
                    max_depth:树的深度
                    random_state:随机数种子
        3.5.4案例:泰坦尼克号乘客生死预测
            流程分析:
          特征值+目标值
          1)获取数据
          2)数据处理
              缺失值处理
              特征值 -> 字典类型
          3)准备好特征值 目标值
          4)划分数据集
          5)特征工程:字典特征抽取
          6)决策树预估器流程
          7)模型评估
        3.5.5决策树可视化
            1、保存树的结构到dot文件
                sklearn.tree.export_graphviz()
                    tree.export_graphviz(estimator,out_file="tree.dot",feature_names=[])
            2、可视化
                1)复制生成的dot文件中的内容到http://webgraphviz.com/网站
                2)进入windows命令行界面,cd切换到tree.dot所在的路径,执行dot -Tpng tree.dot -o tree.png        
        3.5.6决策树总结
            1、优点:
          可视化,可解释能力强
      2、缺点:
          容易产生过拟合(随机森林可有效解决)
    3.6集成学习方法之随机森林
        3.6.1什么是集成学习方法
            1、定义
                通过建立几个模型组合来解决单一预测问题
            2、原理
                生成多个分类器/模型,各自独立地学习和作出预测,这些预测最后结合成组合预测,
                因此优于任何一个单分类做出的预测
        3.6.2什么是随机森林
            随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数(占比最多的类别)而定
        3.6.3随机森林原理
            1、每棵树都是随机产生的,具体体现在两个随机:
                训练集:特征值+目标值,共有N个样本,M个特征
                1)特征值随机 - 从M个特征中随机抽取m个特征(M >> m)(下述参数max_features)
                    降维
                2)训练集随机 - N个样本中随机有放回的抽样N个
                    bootstrap(随机有放回抽样)
            2、森林
                多个决策树
        3.6.4API
            sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, bootstrap=True, random_state=None, min_samples_split=2)
                1、参数:    
                    1)n_estimators:森林里的树木数量,integer,可选(default = 10,常用[120,200,300,500,800,1200])
                    2)Criterion:分割特征的测量方法,string,可选(default =“gini”,可选"entropy")
                    3)max_depth:树的最大深度,integer或None,可选(default=None,常用[5,8,15,25,30]) 
                    4)max_features:每个决策树的最大特征数量,default="auto”,
                            If "auto", then max_features=sqrt(n_features).
                            If "sqrt", then max_features=sqrt(n_features)(same as "auto").
                            If "log2", then max_features=log2(n_features).
                            If None, then max_features=n_features.
                    5)bootstrap:是否在构建树时使用放回抽样,boolean,可选(default = True)
                    6)min_samples_split:节点划分最少样本数
                    7)min_samples_leaf:叶子节点的最小样本数
                2、超参数(网格搜索和交叉验证时param_dict={}):
                    n_estimators, max_depth, min_samples_split,min_samples_leaf
        3.6.5案例:随机森林处理泰坦尼克号预测
        3.6.6总结
            能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维。