CHEATSHEET January 20, 2022

TF-ML

Words count 19k Reading time 17 mins. Read count 0

https://tensorflow.google.cn/resources/learn-ml/theoretical-and-advanced-machine-learning?hl=zh-cn

https://tensorflow.google.cn/tutorials/keras/classification?hl=zh-cn

http://c.biancheng.net/view/1881.html

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/

Read

1
2
3
4
5
import pandas as pd
import idsw.hdfs as ih
hdfs = ih.client()
reader = hdfs.open('/user/1.csv', 'rb')
df = pd.read_csv(reader)

Write

1
2
with hdfs.open('/user/2.csv', 'wb')  as ff:
out.to_csv(ff,index=0,header=1)

dataset convert

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# do this for train and test dataset
raw_train_df = <uid,label,c1,c2,c3...>
raw_test_df = <uid,c1,c2,c3...>

train_uid=raw_train_df['acc_nbr']
train_y=raw_train_df['label'] # df.iloc[:,1] df.iloc[:,2:176]
train_X=raw_train_df.drop(['acc_nbr','label'], axis=1) # axis=0表示行,axis=1表示列

test_uid=raw_test_df.pop("acc_nbr")
test_X=raw_test_df

from sklearn.model_selection import train_test_split
#from imblearn.datasets import make_imbalance
#X_imb, y_imb = make_imbalance(train_X, train_y,sampling_strategy={1: 50000, 2: 338166, 3: 390000})
#X_train, X_test, y_train, y_test = train_test_split(X_imb, y_imb)
X_train, X_test, y_train, y_test = train_test_split(train_X, train_y)
train_X.shape
train_y=train_y-1

# predict for test dataset
test_fea=torch.from_numpy(test_X.values).float()
outputs = model(test_fea)
_, y_pred = torch.max(outputs.data, dim = 1)
y_pred=y_pred+1
y_pred

submit=pd.merge(test_uid, pd.Series(y_pred, name='label'), left_index=True, right_index=True)

check = pd.merge(submit, Feb_ans, on=['acc_nbr'])
y_predicted = check['label_x']
y_true = check['label_y']

accuracy = np.mean(y_predicted == y_true) * 100
print ("accuracy:",accuracy)
from sklearn.metrics import recall_score
print(recall_score(y_true,y_predicted,average = 'macro'))
from sklearn.metrics import classification_report
print(classification_report(y_true, y_predicted,labels=['1','2','3']))
1
2
3
4
5
6
7
8
9
10
import numpy as np
import torch
from torch.utils.data import DataLoader, TensorDataset
from torchvision import datasets, transforms

batch_size = 64
train_set = TensorDataset(torch.from_numpy(X_train.values).float(),torch.from_numpy(y_train.values))
test_set = TensorDataset(torch.from_numpy(X_test.values).float(),torch.from_numpy(y_test.values))
train_loader = DataLoader(train_set,batch_size=batch_size,shuffle=True,num_workers=4)
test_loader = DataLoader(test_set,batch_size=batch_size,shuffle=True,num_workers=4)

torch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from torch import nn
class Net(torch.nn.Module):
def __init__(self):
super(Net, self).__init__()
self.l1 = torch.nn.Linear(174, 256)
self.l2 = torch.nn.Linear(256, 128)
self.l3 = torch.nn.Linear(128, 64)
self.l4 = torch.nn.Linear(64, 8)
self.l5 = torch.nn.Linear(8, 3)

def forward(self, x):
x = x.view(-1, 174) # -1自动计算N,将(N,1, 28, 28) 变成 (N, 784)
x = F.relu(self.l1(x))
x = F.relu(self.l2(x))
x = F.relu(self.l3(x))
x = F.relu(self.l4(x))
return self.l5(x) # 最后一个不做激活
model = Net()

criterion = torch.nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr = 0.01, momentum = 0.5) # momentum:带冲量的优化算法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#for i_batch, batch_data in enumerate(train_loader):
# print(i_batch) # 打印batch编号
# print(batch_data[0]) # 打印该batch里面src
# print(batch_data[1]) # 打印该batch里面trg

train_label

def train(epoch):
running_loss = 0.0
for batch_idx, data in enumerate(train_loader, 0):
inputs, target = data # 多分类中标签用数字的时候标签要从0开始算起
optimizer.zero_grad() # 优化器清零

outputs = model(inputs) # 获得预测值,forward
loss = criterion(outputs, target) # 获得损失值
loss.backward() # backward
optimizer.step() # update

running_loss += loss.item() # 注意加上item:不构成计算图
if batch_idx % 300 == 299:
print('[%d, %5d] loss: %.3f'%(epoch + 1, batch_idx + 1, running_loss / 300))
running_loss = 0.0

def test():
correct = 0
total = 0
with torch.no_grad(): # 不需要计算梯度
for data in test_loader:
features, labels = data
outputs = model(features)
_, predicted = torch.max(outputs.data, dim = 1) # 每一行的最大值下标
total += labels.size(0) # 测试了多少个数据
correct += (predicted == labels).sum().item() # 计算有多少个预测正确
print('Accuuracy on test set: %d %%' % (100 * correct / total)) # 输出正确率

for epoch in range(10):
train(epoch)
test()

数据预处理

过滤

阈值过滤器

移动平均滤波器

中位数滤波器

数据操作

  • 选择列
  • join
  • 删除重复行
  • 缺失值处理
  • 数学运算
  • 类型转换
  • 数据移动
  • 增加序列号
  • 更改列名
  • 替换值
  • 按列排序
  • 按值排序
  • 合并行
  • 合并列
  • 分组

标准化

标准化指将数据按比例缩放,使之落入一个小的特定区间。在某些比较和评价的指标处理中经常会用到,去除数据的单位限制,将其转化为无量纲的纯数值,便于不同单位或量级的指标能够进行比较和加权。

比如,在评价不同时期的物价指数时,较低价格的蔬菜和较高价格的家电的价格涨幅都可以被纳入其中,但是由于它们的价格水平差异较大,如果直接用其价格做分析,会使价格水平较高的家电在综合指数中的作用被放大。因此,为了保证结果的可靠性,需要对原始指标数据进行变换处理,使不同的特征具有相同的尺度。

分箱

数据标准化

MinMax标准化 - 归一化
公式:X’ = (X-Xmin) / (Xmax-Xmin)
处理后,该变量各个观察值的数值变化范围都满足0≤X’≤1
如果有新数据加入,就可能会导致最大值(Xmax)和最小值(Xmin)发生变化,就需要进行重新定义,并重新计算极差(R)

z-score标准化 - 规范化
新数据=(原数据- 均值)/ 标准差
当遇到某个指标的最大值和最小值未知的情况,或有超出取值范围的离群数值时,上面的方法就不再适用了,可以采用另一种数据标准化最常用的方法,即Z-score标准化,也叫标准差标准化法。

哪些算法需要标准化
1、涉及或隐含距离计算的算法,比如K-means、KNN、PCA、SVM等,一般需要进行标准化

2、梯度下降算法,梯度下降的收敛速度取决于:参数的初始位置到local minima的距离,以及学习率η的大小,其实还是距离的计算

3、采用sigmoid等有饱和区的激活函数,如果输入分布范围很广,参数初始化时没有适配好,很容易直接陷入饱和区,导致梯度消失,所以才会出现各种BN,LN等算法

哪些算法不需要标准化
与距离计算无关的概率模型不需要,比如Naive Bayes;

与距离计算无关的基于树的模型,比如决策树、随机森林等,树中节点的选择只关注当前特征在哪里切分对分类更好,即只在意特征内部的相对大小,而与特征间的相对大小无关。但是我们前几篇文章中说到了,使用Z-Score归一化会提高模型的准确率。其实归一化的作用就是由绝对变为了相对,所以可以说归一化对于树型模型不那么重要,是一个可选项或者说可以作为一个超参数在训练时进行选择。

二值化

采样/拆分

特征工程

特征变换

PCA

OneHot

特征重要性评估

线性特征重要性评估

随机森林特征重要性评估

特征选择

过滤式特征选择

机器学习

算法

分类

二分类

  • 朴素贝叶斯:条件概率公式
  • 逻辑回归:概率划分
  • 决策树:信息量划分
  • 随机森林:信息量划分
  • GBDT:信息量划分
  • SVM:空间划分
  • KNN:距离划分
  • FM因子分解机:概率划分
  • 神经网络
  • XGBoost:信息量划分
  • LightGBM

分类评估:F1

多分类

  • 朴素贝叶斯:条件概率公式
  • KNN:距离划分
  • 决策树:信息量划分
  • 随机森林:信息量划分
  • GBDT:信息量划分
  • 神经网络
  • XGBoost:信息量划分
  • LightGBM

分类评估:

  • Micro-F1:各样本一起计算
  • Macro-F1:各类计算F1求平均

多标签分类

每个样本可以预测位一个或多个类别

回归/预测

目标是连续的数值

  • 线性回归
  • 决策树回归
  • 随机森林回归
  • GBDT回归
  • 神经网络回归
  • XGBoost回归
  • LightGBM回归

时间序列

SARIMA时间序列分析

LSTM时间序列分析

聚类

KMeans

预测

评估

二分类模型评估

多分类模型评估

回归模型评估

聚类模型评估

推荐系统

ALS

0%