参考书git
《Python数据科学手册》第五章“机器学习”github
工具算法
Jupyter Lab网络
做用app
给书中没有的知识点作补充。dom
断定系数(coefficient of determination),也叫可决系数或决定系数,是指在线性回归中,回归平方和与总离差平方和之比值,其数值等于相关系数的平方。它是对估计的回归方程拟合优度的度量。(参考:百度百科)机器学习
断定系数(记为R$^2$)在统计学中用于度量因变量的变异中可由自变量解释部分所占的比例,以此来判断统计模型的解释力。对于简单线性回归而言,断定系数为样本相关系数的平方。ide
假设一数据集包括$y_1, y_2, ..., y_n$共n个观察值,相对应的模型预测值分别为$f_1, f_2, ..., f_n$。定义残差$e_i = y_i - f_i$,函数
平均观察值为:$\bar{y} = \cfrac{1}{n} \sum\limits_{i=1}^n y_i$
因而能够获得总平方和:$SS_{tot} = \sum\limits_{i=1} (y_i - \bar{y})^2$
回归平方和:$SS_{reg} = \sum\limits_{i=1} (f_i - \bar{y})^2$
残差平方和:$SS_{res} = \sum\limits_{i=1} (y_i - f_i)^2 = \sum\limits_{i=1} e_i^2$
由此,断定系数可定义为:$R^2 = 1 - \cfrac{SS_{res}}{SS_{tot}}$
R$^2$ = 1:表示模型与数据彻底吻合。
R$^2$ = 0:表示模型不比简单取均值好。
R$^2$ < 0:表示模型性能不好。
断定系数只是说明列入模型的全部解释变量对因变量的联合的影响程度,不说明模型中单个解释变量的影响程度。
断定系数达到多少为宜?没有一个统一的明确界限值;若建模的目的是预测因变量值,通常需考虑有较高的断定系数。若建模的目的是结构分析,就不能只追求高的断定系数,而是要获得整体回归系数的可信任的估计量。断定系数高并不必定说明每一个回归系数均可信任。
咱们在生活中常常遇到这种状况:咱们能够很容易直接得出P(A|B),P(B|A)则很难直接得出,但咱们更关心P(B|A),贝叶斯定理就为咱们打通从P(A|B)求得P(B|A)的道路。
$P(B|A) = \cfrac{P(A|B)P(B)}{P(A)}$
推导:$P(A, B) = P(B|A) * P(A) = P(A|B) * P(B)$
参考:机器学习之贝叶斯(贝叶斯定理、贝叶斯网络、朴素贝叶斯)
朴素贝叶斯分类是一种十分简单的分类算法,叫它朴素贝叶斯分类是由于这种方法的思想真的很朴素。
朴素贝叶斯的思想基础是这样的:对于给出的待分类项,求解在此项出现的条件下各个类别出现的几率,哪一个最大,就认为此待分类项属于哪一个类别。通俗来讲,就比如这么个道理,你在街上看到一个黑人,我问你你猜这哥们哪里来的,你十有八九猜非洲。为何呢?由于黑人中非洲人的比率最高,固然人家也多是美洲人或亚洲人,但在没有其它可用信息下,咱们会选择条件几率最大的类别,这就是朴素贝叶斯的思想基础。
因为朴素贝叶斯分类器对数据有严格的假设,所以它的训练效果一般比复杂模型的差。其优势主要体如今如下四个方面。
朴素贝叶斯分类器很是适合用于如下应用场景:
模式识别中每一个方法的实现都是基于一个特定的数据样本集的,可是这个样本集只是全部可能的样本中的一次随机抽样,毕竟在咱们的生活实际中存在着万物众生,多到咱们数也数不清,甚至计算机都没法统计的清,而咱们搜集到的充其量只是其中很小很小的一部分,这也是为何机器学习中缺乏的只是数据,只要有足够多的学习数据,就必定能取得惊人的结果,所以模式识别和机器学习中的不少方法的实现结果都无疑会受到这种随机性的影响,咱们训练获得的分类器也所以具备偶然性,尤为是样本不足够多时更为明显。
对于决策树而言,其树的生长是采用的贪心算法,只考虑当前局部的最优,所以其受这种随机性影响会更加严重,这也是为何有的决策树泛化能力那么差的缘由。
针对这种随机性的影响,最先在统计学中有人提出了一种叫作”自举(Bootstrap)“的策略,基本思想是对现有样本进行重复采样而产生多个样本子集,经过这种屡次重复采样来模拟数据的随机性,而后在最后的输出结果中加进去这种随机性的影响。随后有人把这种自举的思想运用到了模式识别中,衍生出了一系列的解决方法,像随机森林、Bagging、Adaboost等。
白化的目的是去除输入数据的冗余信息。假设训练数据是图像,因为图像中相邻像素之间具备很强的相关性,因此用于训练时输入是冗余的;白化的目的就是下降输入的冗余性。
输入数据集X,通过白化处理后,新的数据X'知足两个性质:
(1)特征之间相关性较低;
(2)全部特征具备相同的方差。
其实咱们以前学的PCA算法中,可能PCA给咱们的印象是通常用于降维操做。然而其实PCA若是不降维,而是仅仅使用PCA求出特征向量,而后把数据X映射到新的特征空间,这样的一个映射过程,其实就是知足了咱们白化的第一个性质:除去特征之间的相关性。所以白化算法的实现过程,第一步操做就是PCA,求出新特征空间中X的新坐标,而后再对新的坐标进行方差归一化操做。
参考连接:机器学习(七)白化whitening,PCA 和 白化区别
predict_proba
方法计算样本属于某个标签的几率。缺点:因为分类结果只能依赖于一开始的模型假设,所以高斯朴素贝叶斯常常得不到很是好的结果。RandomizedPCA
:使用了一个非肯定算法,快速地近似计算出一个维度很是高的数据的前几个主成分。SparsePCA
:引入了一个正则项来保证成分的稀疏性。sklearn.cluster.SpectralClustering
评估器中实现,它使用最邻近来计算数据的高维表示,而后用k-means算法分配标签); d. 当数据量较大时,k-means会很慢。这时就须要将“每次迭代都必须使用全部数据点”这个条件放宽,例如每一步仅使用数据集的一个子集来更新簇中心点。这偏偏就是批处理(batch-based)k-means算法的核心思想,该算法在sklearn.clust er.MiniBatchKMeans
中实现。还可使用k-means用于色彩压缩。缺点:在实际应用中,k-means的非几率性和它仅根据到簇中心点的距离来指派簇的特色将致使性能低下。因为k-means自己没有度量簇的分配几率或不肯定性的方法,k-means能够理解为在每一个簇的中心放置了一个圆,在这个圆圈以外的任何点都不是该簇的成员。全部k-means的这两个缺点——类的形状缺乏灵活性、缺乏簇分配的几率——使得它对许多数据集(特别是低维数据集)的拟合效果不尽人意。sklearn.model_selection.train_test_split
:留出集。X1, X2, y1, y2 = train_test_split(X, y, random_state, train_size)
sklearn.feature_extraction.DictVectorizer
:独热编码。解决常见的非数值类型的分类特征。vec = DictVectorizer(sparse, dtype)
sklearn.feature_extraction.text.CountVectorizer
:单词统计。将文字编码成数字的技术手段。vec = CountVectorizer()
sklearn.feature_extraction.text.TfidVectorizer
:TF-IDF(term frequency-inverse document frequency,词频逆文档频率)。经过单词在文档中出现的频率来衡量其权重,IDF的大小与一个词的常见程度成反比。vec = TfidVectorizer()
sklearn.preprocessing.PolynomialFeatures
:多项式特征,输入特征通过数学变换衍生出来的新特征,这种特征叫作衍生特征,这种处理方式被称为基函数回归(basis function regression)。poly = PolynomialFeatures(degree, include_bias)
sklearn.preprocessing.Imputer
:缺失值补充。用均值、中位数、众数等填充方法补充缺失值。imp = Imputer(strategy)
sklearn.pipeline.make_pipeline
:特征管道。将多个步骤串起来。model = make_pipeline(*steps)
skimage.feature.hog
:HOG特征(方向梯度直方图,Histogram of Oriented Gradients)。它能够将图像像素转换为向量形式,与图像具体内容有关,与图像合成因素无关。它是一个简单的特征提取程序,专门用来识别行人(pedestrians)的图像内容。sklearn.metrics.accuracy_score
:验证模型越策结果的准确率(预测的全部结果中,正确结果占总预测样本数的比例)。accuracy_score(y_true, y_pred)
sklearn.metrics.confusion_matrix
:混淆矩阵,分类结果和原始标签的一个表。confusion_matrix(y_true, y_pred)
sklearn.model_selection.cross_val_score
:交叉验证。cross_val_score(model, X, y, cv)
sklearn.model_selection.LeaveOneOut
:留一(LOO)交叉验证。cross_val_score(model, X, y, cv=LeaveOneOut())
sklearn.model_selection.validation_curve
:验证曲线。计算验证范围内的训练得分和验证得分。train_score, val_score = validation_curve(model, X, y, param_name, param_range, cv)
sklearn.model_selection.learning_curve
:学习曲线。反映训练集规模的训练得分 / 验证得分曲线。learning_curve(model, X, y, cv, training_sizes)
sklearn.model_selection.GridSearchCV
:网格搜索。寻找模型的最优参数。GridSearchCV(model, param_grid, cv)
个人CSDN:https://blog.csdn.net/qq_21579045
个人博客园:https://www.cnblogs.com/lyjun/
个人Github:https://github.com/TinyHandsome
纸上得来终觉浅,绝知此事要躬行~
欢迎你们过来OB~
by 李英俊小朋友