监督学习(有目标值,输入数据有特征有标签,即有标准答案)
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总结
能够有效地运行在大数据集上,处理具有高维特征的输入样本,而且不需要降维。