C/C++ Development In Visual Studio Code

由于我工作环境是Linux和Mac,个人的工作目录和开发环境一直来回切换,之前一直使用emacs,emacs非常强大和可定制化。最近看到vscode的社区不断壮大,在好基友的推荐下,试用vscode,发现非常不错。于是记录和分享到博客中。今天主要给大家讲解的vscode配置c/c++ ide开发环境,当然官网支持很多种可定制化的配置。

开发环境搭建

我们首先安装vscode,官网是:vscode。我们下面来安装支持c/c++开发环境的安装包。 * cpptools * cmake * C/C++ Clang

我们在工作目录依次安装如下,c_cpp_properties.json(指定c/c++包和平台相关的配置文件),launch.json(debug 调试),tasks.json(你的编译等命令)

机器学习性能度量

我们在进行机器学习时需要衡量机器学习的优劣和本身模型的准确程度,比如简单的衡量数据的准确率和错误率,但是我们更关心的是模型的泛化能力的指标,即基于模型的所选的item相关性以及模型分类指标的好坏。

机器学习度量

  • error rate(错误率):把分类错误的样本数占样本总数的比例。$$E=a/m$$
  • accuracy(精确度):分类正确的样本数占样本总数的比例。$$acc=1-E$$
  • training error(训练误差):学习器在训练集上的误差。
  • generalization error(泛华误差):在新样本上的误差。

在机器学习中由很多机器学习算法,那么如何选择这些算法和模型,如何评估这些算法和模型,评估模型的算法和准确率的方式很多,我们依次来介绍一下几个常用的指标。TP、TN、FP、FN、Acc、Recall、F1、ROC和ROI

各种机器学习衡量指标

Accuracy、Precision、Recall和F1-Score

混淆矩阵是按照预测分类和实际分类的类别对比,如下图所示: 混淆矩阵 如上表所示,行表示预测的label值,列表示真实label值。TP,FP,FN,TN分别表示如下意思: * TP(true positive):表示样本的真实类别为正,最后预测得到的结果也为正 * FP(false positive):表示样本的真实类别为负,最后预测得到的结果却为正 * FN(false negative):表示样本的真实类别为正,最后预测得到的结果却为负 * TN(true negative):表示样本的真实类别为负,最后预测得到的结果也为负

$$ Accuracy = \frac{TP+TN}{TP+FP+TN+FN} $$ $$ Precision = \frac{TP}{TP+FP} $$ $$ Recall = \frac{TP}{TP+FN} $$ $$ SP = \frac{TN}{TN + FP}
$$

  • Accuracy:表示预测结果的精确度,预测正确的样本数除以总样本数。
  • Precision,准确率,表示预测结果中,预测为正样本的样本中,正确预测为正样本的概率;
  • Recall,召回率,表示在原始样本的正样本中,最后被正确预测为正样本的概率;
  • Specificity,常常称作特异性,它研究的样本集是原始样本中的负样本,表示的是在这些负样本中最后被正确预测为负样本的概率。

在实际当中,我们往往希望得到的precision和recall都比较高,比如当FN和FP等于0的时候,他们的值都等于1。但是,它们往往在某种情况下是互斥的。例如,有50个正样本,50个负样本,结果全部预测为正样本,那么TP=50,FP=50,TN=0,FN=0,按照上面的公式计算,可以得到正样本的recall却为1,precision却为0.5.所以需要一种折衷的方式,因此就有了F1-score。

$$ F1-score = \frac{2\times recall \times precision}{ recall + precision} $$

F1-score表示的是precision和recall的调和平均评估指标. 另外还有一个指标,即MCC,该指标对于不均衡数据集的评估非常有效,公式如下:

$$ MCC=\frac{(TP \times TN)-(FP \times FN)}{\sqrt{(TP+FP)\times(TP+FN)\times(TN+FP)\times(TN+FN)}} $$

结构化的机器学习流程

机器学习可以通过结构化的流程来梳理:1.定义问题和需求分析->2.数据探索->3.数据准备->4.评估算法->5.优化模型->6.部署。 * 导入类库 * 导入数据集 * 数据统计分析 * 数据可视化 * 数据清洗 * 特征选择 * 数据转换 * 分离数据集 * 定义模型评估标准 * 算法审查 * 算法比较 * 算法调参 * 集成算法 * 预测评估数据集 * 利用数据生成模型 * 序列化模型

数据理解

数据的理解主要在于分析数据维度、数据类型属性、数据分布以及相关性等。数据属性的相关性是指数据的两个属性的互相影响。

数据统计分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 数据导入与数据维度探索
from numpy import loadtxt
with open(filename,'rt') as rawdata:
    data = loadtxt(rawdata,delimiter=',')
    print(data.shape)
#数据属性和描述性统计
print(data.dtype)
print(data.describe())
#数据根据类别分类
print(data.group("class").size())
#数据属性相关性(皮尔逊相关系数,1完全正相关,-1完全负相关,0不相关)
print(data.corr(method="pearson"))
#数据分布分析,skew代表高斯分布的偏离程度,数据接近于0表示数据偏差非常小
print(data.skew())