python笔记记录(1):数据挖掘中可以保存常用的函数

1. set_figsize():设置图片大小格式

from IPython import display
from matplotlib import pyplot as plt
def use_svg_display():
    display.set_matplotlib_formats('svg')
# 设置图片格式为svg,SVG(Scalable Vector Graphics)是一种基于XML的矢量图形格式,用于描述二维矢量图形。它通常被用来替代传统的位图格式(如JPEG、PNG),特别是在需要图形缩放和高质量渲染的应用场景中。
def set_figsize(figsize=(3.5,2.5)):
# 默认figsize=(3.5,2.5),可以输入其他数值
    use_svg_display()
    plt.rcParams['figure.figsize']=figsize
# plt.rcParams 是一个用于设置绘图参数的字典,这些参数控制着matplotlib库中的绘图样式和默认行为。plt.rcParams['figure.figsize'] 是其中的一个参数,用于设置绘图窗口的尺寸,即图形对象的大小。

2. data_iter(batch_size,features,labels): 遍历数据集并不断读取batch_size个小批量数据样本,一般在小批量梯度下降前的数据集处理中使用。

from mxnet import nd
import random
def data_iter(batch_size,features,labels):
    num_examples=len(features)
# features的行数
    indices=list(range(num_examples))
    random.shuffle(indices)
# 随机打乱indices,random.shuffle只能接受列表类型
    for i in range(0,num_examples,batch_size):
# 0到num_examples,步长为batch_size
        j=nd.array(indices[i:min(i+batch_size,num_examples)])
# 使用min函数防止最后一组出现超过num_examples的情况
# indices是随机打乱的,这里是对随机打乱后的indices进行索引的小批量选择
        yield features.take(j),labels.take(j)
# yield只能出现在函数中,不能单独使用
# for...yield是通过生成器实现的,它允许在迭代过程中返回一个值,然后在下次迭代时从上次返回的位置继续执行。这种方式可以用于创建惰性计算的迭代器,从而提高内存效率,因为它不会一次性生成所有元素,而是在需要时才计算下一个元素。
# take()根据索引返回对应元素

3. ArrayDataset(*args):生成一个包含多个类似数据集对象(比如数据集,列表,数组)的数据集

DataLoader(dataset,batch_size=None,shuffle=False,sampler=None,last_batch=None,batch_sampler=None,batchify_fn=None,num_workers=0):加载数据集中的数据并返回小批量数据,和前面data_iter效果相似。mxnet包需要根据书中链接安装。

from mxnet.gluon import data as gdata
dataset=gdata.ArrayDataset(features,labels)
# dataset合并后features和labels仍然是分开的,在下一步生成的data_iter中可以分别选取
data_iter=gdata.DataLoader(dataset,batch_size,shuffle=True)
# shuffle 是否打乱数据顺序

4. Sequential():串联各个层的容器

add():向容器中添加层

initialize():初始化层中参数

from mxnet.gluon import nn
from mxnet import init
net=nn.Sequential()
net.add(nn.Dense(1))
# 一个全连接层
net.initialize(init.Normal(sigma=0.01))
# 指定初始化采样于均值为0,标准差为0.01的正态分布

5. L2Loss(): 计算预测值和真实值之间的MSE

from mxnet.gluon import loss as gloss
loss=gloss.L2Loss()
l=loss(net(X),y)

6.Trainer(params,optimizer,optimizer_params=None,kvstore='device',compression_params=None):对一组参数实施优化算法,需要和autograd一起使用

from mxnet import gluon
trainer=gluon.Trainer(net.collect_params(),'sgd',{'learning_rate':0.03})
# net.collect_params()获取net中所有通过add函数嵌套的层所包含的全部参数
with autograd.record():
    l=loss(net(X),y)
l.backward()
trainer.step(batch_size)

7.vision.tranforms.ToTensor():应用在图像数据上,实现图像到张量的转换

from mxnet.gluon import data as gdata
transformer=gdata.vision.transforms.ToTensor()

8. evaluate_accuracy(data_iter,net):判断模型的准确率,用到前面提到的data_iter

def evaluate_accuracy(data_iter,net):
    acc_sum,n=0.0,0
    for X,y in data_iter:
        y=y.astype('float32')
        acc_sum+=(net(X).argmax(axis=1)==y).sum().asscalar()
# net(X).argmax(axis=1)返回矩阵中每行最大元素的索引
        n+=y.size
    return acc_sum/n

9.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,params=None,lr=None,trainer=None):训练模型

def train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,params=None,lr=None,trainer=None):
    for epoch in range(num_epochs):
        train_l_sum,train_acc_sum,n=0.0,0.0,0
        for X,y in train_iter:
            with autograd.record():
                y_hat=net(X)
                l=loss(y_hat,y).sum()
            l.backward()
            if trainer is None:
                d2l.sgd(params,lr,batch_size)
            else:
                trainer.step(batch_size)
            y=y.astype('float32')
            train_l_sum+=l.asscalar()
            train_acc_sum+=(y_hat.argmax(axis=1)==y).sum().asscalar()
            n+=y.size
        test_acc=evaluate_accuracy(test_iter,net)
        print(f'epoch {epoch+1},loss {train_l_sum/n:.4f},train acc{train_acc_sum/n:.3f}, test acc{test_acc:.3f}')

参考资料:

《动手学深度学习》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值