0%

-d 容器在后台运行

-P 将容器内部的端口映射到我们的主机上

1
2
docker ps    #查看全部正在开启的docker
docker ps

1.进入以及退出docker

​ 进入docker命令主要分为两种,attach和exec命令,但是由于exec命令退出后容器继续运行,因此更为常用。

1
2
3
4
5
6
7
8
9
10
#首先查看正在运行的docker,在其中选择想要进入的docker name
docker ps

#然后使用exec进行进入docker
docker exec --it docker_name /bin/bash/

#进行各种操作

#退出docker
exit或Ctrl+D

2.docker和宿主主机之间传输文件

​ docker 使用docker cp 命令来进行复制,无论容器有没有进行运行,复制操作都可以进行执行

1
2
3
4
5
#从docker中赋值文件到宿主主机
docker cp docker_name:/docker_file_path local_path

#从宿主主机复制到docker
docker cp local_path docker_name:/docker_file_path

1.cat

​ 对数据沿着某一维度进行拼接,cat后数据的总维数不变。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import torch
torch.manual_seed(1)
x = torch.randn(2,3)
y = torch.randn(1,3)

s = torch.cat((x,y),0)

print(x,y)
print(s)

output:
0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
[torch.FloatTensor of size 2x3]

-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 1x3]

0.6614 0.2669 0.0617
0.6213 -0.4519 -0.1661
-1.5228 0.3817 -1.0276
[torch.FloatTensor of size 3x3]

注:torch.cat和torch.concat作用用法完全相同,只是concat的简写形式

2.unsequeeze和sequeeze

​ torch.sequeeze主要用于维度压缩,去除掉维数为1的维度。

1
2
3
4
5
6
7
8
#1.删除指定的维数为1的维度
#方式一:
torch.sequeeze(a,2)
#方式二:
a.sequeeze(2)

#2.删除全部维度为1的维度
torch.sequeeze(a)

​ torch.unsequeeze主要用于维度拓展,增加维数为1的维度。

1
torch.unsequeeze(a,2)   #在维度2增加维数为1的维度

1.transponse

​ torch.transponse操作是转置操作,是一种在矩阵乘法中最常用的几种操作之一。

1
2
#交换两个维度
torch.transponse(dim1,dim2)

2.matmul和bmm

​ matmul和bmm都是实现batch的矩阵乘法操作。

1
2
3
4
5
6
7
8
9
a = torch.rand((2,3,10))
b = torch.rand((2,2,10))

res1 = torch.matmul(a,b.transpose(1,2))
#res1 = torch.matmul(a,b.transose(1,2))
print res1.size()

output:
[torch.FloatTensor of size 2x3x2]

tmux 是一款终端复用命令行工具,一般用于 Terminal 的窗口管理。

tmux核心功能

1.tmux可以在一个窗口中创建多个窗格

2.终端软件重启后通过命令行恢复上次的session

在tmux中快捷键都需要在使用之前先按前缀快捷键(mac默认⌃b,windows默认control),以下是常用的集中快捷键列表:

1. 窗格操作

  • % 左右平分出两个窗格
  • " 上下平分出两个窗格
  • x 关闭当前窗格
  • { 当前窗格前移
  • } 当前窗格后移
  • ; 选择上次使用的窗格
  • o 选择下一个窗格,也可以使用上下左右方向键来选择
  • space 切换窗格布局,tmux 内置了五种窗格布局,也可以通过 ⌥1⌥5来切换
  • z 最大化当前窗格,再次执行可恢复原来大小
  • q 显示所有窗格的序号,在序号出现期间按下对应的数字,即可跳转至对应的窗格

2.会话操作

​ 在shell中每次输入tmux都会创建一个tmux会话(session),在tmux中常用的tmux操作包括:

  • $ 重命名当前会话
  • s 选择会话列表
  • d detach 当前会话,运行后将会退出 tmux 进程,返回至 shell 主进程

​ 在shell准进程中也可以进行直接对session进行操作:

tmux new -s foo #创建名为foo的会话

tmux ls #列出所有的tmux

tmux a #恢复至上一次回话

tmux a -t foo #恢复会话名称为foo的会话

tmux kill-session -t foo #删除会话名称为foo的会话

tmux kill-server #删除所有会话

除了上面常用的快捷键以外,还可以直接使用前缀快捷键⌃b加?来查看所有快捷键列表

常见机器学习机基本问题

1.参数模型和非参数模型的区别?

参数模型:在进行训练之前首先对目标函数的进行假设,然后从训练数据中学的相关函数的系数

典型的参数模型:LR、LDA(线性判别分析)、感知机、朴素贝叶斯、简单神经网络

参数模型的优点:

  1. 简单:容易理解和解释结果
  2. 快速:训练速度快
  3. 数据需求量少

参数模型的局限性:

  1. 模型的目标函数形式假设大大限制了模型
  2. 由于参数模型复杂度一般不高,因此更适合简单问题

非参数模型:不对目标函数的形式做出任何强烈的假设的算法,可以在训练集中自由的学习任何函数形式

典型的非参数模型:KNN、决策树、SVM

非参数学习模型的优点:

  1. 灵活性强,可拟合各种不同形式的样本
  2. 性能:模型效果一般较好

非参数学习模型的局限性

  1. 训练数据需求量大
  2. 训练速度慢,因为一般非参数模型要训练更多的参数
  3. 可解释性差
  4. 更容易出过拟合

2.生成模型和判别模型

由生成方法生成的模型成为生成模型,由判别方法产生的模型成为生成模型。下面重点介绍两种方法。

生成方法:由数据学联合概率分布P(X,Y),然后求出条件概率P(Y|X)作为预测模型,即生成模型。(之所以称为生成方法是因为模型表示了给定输入X产生出Y的生成关系)

典型的生成模型:朴素贝叶斯、隐马尔科夫链

生成方法特点:

  1. 可还原联合概率分布
  2. 收敛速度更快
  3. 生成方法可处理隐变量,但判别方法不能

判别方法:由数据直接学习决策函数f(x)或者条件概率分布f(Y|X)作为预测模型,即判别模型。

典型的判别模型:KNN、感知机、决策树、LR

判别模型的特点:

  1. 直接学习决策函数或条件概率,直接面对预测,准确率更高
  2. 由于直接学习决策函数或条件概率,可以对数据进行各种程度上的抽象、定义特征并使用特征,简化学习问题

3.常见损失函数以及应用?

逻辑斯特损失函数:

对数似然损失

合页损失

指数损失

4.朴素贝叶斯“朴素”表现在哪里?
“朴素”主要表现在它假设所有特征在数据集中的作用是同样且独立的,而在真实世界中这种假设是不成立的,因此称之为朴素贝叶斯。

数据可视化之散点图和折线图

画图基本常用参数

plt.figure(figure_size=(30,20))       指定图片大小
plt.style.use('ggplot')               指定图片风格
plt.title("image title",fontsize=30)  指定图片标题 

指定坐标轴相关

my_x_trick = np.arrange(0,200,10)     
plt.xtricks(my_x_trick,fontsize=20,rotation)   指定x轴,fontsize指定坐标轴字体,rotation指定文字旋转的角度
plt.ytricks(fontsize=20)    指定y轴

指定画图类型

1.折线图

plt.plot(x,y)   #不指定画图种类时默认为折线图
plt.legend(loc = "best",fontsize=40,shadow=1)  #进行图例格式设定
plt.show()

折线图中plot可用参数:
1.color=’red’ 指定折线的颜色
2.label=’price’ 指定改颜色的图例表示
3.marker=’-‘ 设置折现格式,默认为’-‘,注意这里设置范围不要越界,当设置越界时转换其他图

在一个文件中多次调用plt.plot(),使用不同的数据指定不同颜色和label可在一个图中画多条折线进行对比

image

2.散点图

方式一: 
    plt.scatter(x1,x2,marker='o')       #指定画散点图,marker为点的形状
    plt.show()

方式二:
    plt.plot(x1,x2,marker='o')            #plot使用marker=‘o’则为散点图
    plt.show()

image

在实际情况中第二种方式更为灵活,因此我们下重点介绍第二种方式的参数情况。

散点图中常用参数(方式二):

  1. markerfacecolor 散点内部颜色
  2. markeredgecolor 散点边缘颜色
  3. markersize 散点大小

下面我们以DBSCAN聚类后的结果进行将为可视化为例进行效果展示:

from sklearn.manifold import TSNE

#使用TSNE进行降维
tsne = TSNE(learning_rate=100)
x = tsne.fit_transform(input)


labels = dbscan.labels #获取最终的预测结果
unique_labels = set(dbscan.labels
)

colors = plt.cm.Spectral(np.linspace(0,1,len(set(dbscan.labels_))))   #生成和标签种类数相同的颜色数组

core_samples_mask =np.zeros_like(dbscan.labels_,dtype=bool)   

core_samples_mask[dbscan.core_sample_indices_] = True    #将核心对象点对应的位置置true


plt.style.use(‘ggplot’)
plt.figure(figsize=(30,20))
for k,col in zip(unique_labels,colors):
if k==-1:
col=’k’
class_member_mask = (labels==k)
xy = x[class_member_mask & core_samples_mask]
plt.plot(xy[:,0],xy[:,1],’o’,markerfacecolor=col,markeredgecolor=’k’,markersize=10)
image

DBSCAN和KMeans相关资源和理解

1.DBSCAN

DBSCAN是是一种典型的密度聚类算法,算法主要的思是由密度可达关系导出最大的密度相连样本集合,将其作为一个类。

主要参数:

  • 最小分类样本数
  • 半径
  1. DBSCAN算法为有参数算法,聚类的最终结果很大程度上取决于参数的设定
  2. DBSCAN算法不需要指定聚类个数,聚类个数根据算法和数据情况自动获得

DBSCAN聚类过程

  1. 首先根据半径画每个点的邻域,当点的邻域内点的个数大于最小样本数时,该点位为核心对象(原始数据集重点的变为核心对象和一般点)
  2. 随机确定一个核心点作为初始点,将该初始点全部的最大密度相连的点作为一类。
  3. 将分好类样本从原始的样本集中除去,从新选择核心对象作为聚类中心,再进行2.3操作,直至全部核心对象都被分类

image

DBSCAN代码实现

from sklearn.cluster import DBSCAN

dbcscan = DBSCAN(min_samples=30,eps=1.8)
predict = dbscan.fit_predict(imput)

2.K-Means

KMeans是一种原始性聚类算法,算法主要思想是通过迭代过程把数据集划分为不同的类别,使得评价聚类性能的准则函数达到最优,从而使生成的每个聚类内紧凑,类间独立。
这一算法不适合处理离散型数据,对连续性数据具有良好的效果

  1. Kmeans为无参数算法,算法执行过程中不需要进行调参
  2. Kmeans算法需要指定聚类个数K,这在实际问题中是很难进行确定的

KMeans聚类过程

  1. 根据指定的K值随机寻找K个点作为初始中心,将其他样本分别分给这些中心
  2. 由分好的类计算均值作为其该类新的中心,重新对各个样本分到距离最近的中心,重复这一过程,直至中心不再变化

Kmeans代码实现

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=8)
predict = kmeans.fit_predict(input)

Kmeans、DBSCAN优缺点对比

DBSCAN的主要优点有:

    1) 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。

    2) 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。

    3) 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。

    DBSCAN的主要缺点有:

    1)如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。

    2) 如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。

    3) 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

决策树模型之CART树和C5.0

树模型基本思想:计算结点的纯度来选择最具显著性的切分
不同树模型之间的差异:差异在于衡量纯度变化的标准不同

CART树:Gini系数
C5.0树:信息熵增益

1.回归树(CART树)

回归树也成为分类回归树,是一种既可用于分类也可用于回归的算法。

CART树分类的主要步骤:

1. 决策树的生成:递归的构建而决策树的过程,基于训练数据生成决策树,生成的决策树数量应尽量大。

自上而下的从根开始建立节点,在每个节点处选择一个最好的属性来分类,使子节点红的训练集尽可能的顿。

不同算法使用不同的指标来衡量“最好”:

  • 分类算法:一般选择Gini系数
  • 回归算法:使用最小二乘偏差(LSD)或最小绝对偏差(LSA)

2.决策树剪枝:用验证数据集对已生成的树进行剪枝并选择最优子树这时损失函数最小做为标准

分类树的生成


  1. 对每个特征A,对它所有的可能取值a,将数据集划分为A=a和A!=a两个部分计算集合D的基尼指数

image

  1. 遍历所有的特征 A,计算其所有可能取值 a 的基尼指数,选择 D 的基尼指数最小值对应的特征及切分点作为最优的划分,将数据分为两个子集。

  2. 对上述两个子节点递归调用步骤(1)(2), 直到满足停止条件

  3. 生成CART树

基尼指数:
  1. 是一种不等度的度量
  2. 是介于0~1之间的数,0-完全相等,1-完全不相等
  3. 总体内包含的类别越杂乱,Gini指数就越大

分类问题中,假设存在K个类,样本属于第k个类的概率为pk,则概率分布的Gini指数为:

image

样本集合D的Gini指数为:

image

当在数据集D上根据某一取值a进行分割,得到D1、D2两部分后,那么特征A下集合D的Gini指数为:

image

算法停止条件:
  1. 节点中样本个数小于预定阈值
  2. 样本的Gini指数小于阈值
  3. 没有更多特征

剪枝

在完整的的决策树上,减掉一些完整的子支是决策树变小,从而防止决策树过拟合。

决策树很容易产生过拟合,改善的方式包括:

  1. 通过阈值控制终止条件,防止分支过细
  2. 对决策树进行剪枝
  3. 建立随机森林

2.C5.0

节点分裂标准:信息增益比

C系列决策树发展过程:

阶段一:ID3
   节点选择标准:信息增益
   缺陷:1. 方法会倾向与属性值比较多的变量(如省份字段存在31个水平,性别由两个水平,信息增益会考虑选择省份做特征节点
     2.构造树时不能很好地处理连续变量

阶段二:C4.5
   节点选择标准:信息增益比(避免了偏袒)
   缺点:运行效率很低

阶段三:C5.0
   商业版的C4.5,提升了算法效率,但没有公布具体算法细节

C5.0算法特点

1.C5.0是一种多叉树。

如果根节点或者中间节点为连续变量,则改变量一定会一分为二成为两个分支;如果根节点或者中间节点为离散变量,则分开离散变量水平数个分支因此一个变量一旦被使用,后面节点都不会在使用该变量

2.C5.0生成树采用信息增益比进行分裂节点的选择
3.剪枝采用“减少误差”法和“减少损失”法进行。

减少误差法:核心思想是比较剪枝前后的误差率
   误差率的计算:如果第i个节点中包含N个样本,其中预测错误的样本量为M,则该节点的错误率为f=M/N

减少损失法:该方法结合损失矩阵对树进行剪枝,核心是剪枝前后的的损失量。

4.C5.0只能解决分类问题

1.创建新博文页面

创建博文页面首先要cd 到博客的根目录下,然后运行命令:

1
hexo new "页面名称"

这样则在博客站点的source/_posts/文件夹下创建了指定的“页面名称.md”文件,可以直接对其进行编辑。完成编辑后就可已使用下面的同步命令来将修改提交到GIthub上:

1
hexo d -g    #生成静态文件并部署到服务器,g是generate代表生成文件,d是depoly代表部署到服务器

文件管理

1.查看当前文件夹中文件

#显示文件夹中全部文件和目录数
ls | wc -l
#显示包含指定内容的文件和目录
ls *3094 | wc -l

#显示文件夹中文件的个数
find . -type f | wc -l

注:wc 是统计前面管道输出的东西,-l表示按照行统计

磁盘管理

1.查看文件夹中文件的总大小

#查看当前文件夹中文件总大小
du -h    # -h表示以人可理解的方式输出

#查看指定文件夹中文件的总大小
du /home/yhk/ -h   


2.查看磁盘各个分区大小及使用情况

df -h

内存、Cpu使用情况查看

1.Cpu个数

逻辑Cpu个数查看:

1.方式一:
   先使用top密令进入top界面,在界面中按1,即可出现cpu个数以及使用情况  

2.方式二:
   cat /proc/cpuinfo |grep "processor"|wc -l 

​    
物理CPU个数查看:

cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc -l 

一个物理CPU数几核:

cat /proc/cpuinfo |grep “cores”|uniq

2.CPU内存使用情况

top

实用

程序以忽略挂起信号方式执行

nohup command > myout.file 2>&1 & #文件产生的输出将重定向到myout.file