- pandas.DataFrame.dtypes
用法:df.dtypes
,返回一个Series(sereies的index是DF每一列的名字,value是每一列的dtype),描述了每一列的数据类型,可以通过列的索引来索引返回的Series。如果某一列中混合了多种类型,则该列的类型被认为是object类型。
df = pd.DataFrame({'float': [1.0], 'int': [1], 'datetime': [pd.Timestamp('20180310')], 'string': ['foo']}) print(type(df.dtypes)) print() print(df.dtypes) print() print(df.dtypes[1]) """ <class 'pandas.core.series.Series'> float float64 int int64 datetime datetime64[ns] string object dtype: object int64 """
· pandas.DataFrame.apply
DataFrame.apply(func, axis=0, raw=False, result_type=None, args=(), **kwargs)
func:function
Function to apply to each column or row.即对DF中的每列依次执行func函数,func函数中的参数可以代表张量
该参数一般传入lambda表达式,lambda表达式规定对表格行或列的操作。
axis:{0 or ‘index’, 1 or ‘columns’}, default 0
0 or ‘index’: apply function to each column.(该参数取0表示对列进行操作)
1 or ‘columns’: apply function to each row.(该参数取1表示对行进行操作)
pandas.get_dummies
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
利用pandas实现将离散值转换为one hot encode的方式。
data:array-like, Series, or DataFrame
Data of which to get dummy indicators.(操作的是整个表格对象,如果需要对某些列操作可以直接传入dataframe.列名,还需要将结果拼接到原表格中并删除拆分前的列)
dummy_na:bool, default :False
Add a column to indicate NaNs, if False NaNs are ignored.(当为True时,取值为nan也会被编为新的一列;如果为False就不会创建nan这一列,所以取值为nan的在变换后的这些列的取值都为0)
import pandas as pd
df = pd.DataFrame([
['green' , 'A'],
['red' , 'B'],
['blue' , 'A']])
df.columns = ['color', 'class']
print(df)
print(pd.get_dummies(df))
"""
color class
0 green A
1 red B
2 blue A
color_blue color_green color_red class_A class_B
0 0 1 0 1 0
1 0 0 1 0 1
2 1 0 0 1 0
————————————————
版权声明:本文为CSDN博主「不牌不改」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_46221946/article/details/122699952
pandas fillna() :fillna()会填充nan数据,并返回填充后的结果。
torch.cat
C=torch.cat((A,B),0)就表示按维数0(行)拼接A和B,也就是竖着拼接,A上B下。此时需要注意:列数必须一致,即维数1数值要相同,方能列对齐。
C=torch.cat((A,B),1)就表示按维数1(列)拼接A和B,也就是横着拼接,A左B右。此时需要注意:行数必须一致,即维数0数值要相同,方能行对齐。
从2维例子可以看出,使用torch.cat((A,B),dim)时,除拼接维数dim数值可不同外其余维数数值需相同,方能对齐。
torch.sqrt
sqrt(x) 函数的定义域为 [0, 无穷大)
sqrt(x) 的导函数的定义域 却是 (0, 无穷大)
这些函数定义域跟导函数的定义域不一样,正向传播可以得到正常结果,但是一旦backward就会得到Nan。
因此在代码中先要将linear的输出值clamp到(1,正无穷)
torch.clamp(input, min, max, out=None) → Tensor
将输入input
张量每个元素的夹紧到区间 [min,max][min,max],并返回结果到一个新张量。
clippes_preds = torch.clamp(net(features),1,float('inf'))
Python中可以用如下方式表示正负无穷:
float("inf"), float("-inf")
class slice(start, stop[, step])
该函数用于创建切片(slice)对象,切片对象表示由 range(start, stop,step)
指定的索引的集合。
start, stop, step 可以是任意类型的值,其中 start 和 step 的默认值是 None
。
torch.nn.Linear
首先nn.Linear是一个类,使用前需要先实例化,实例化时需要传入输入神经元的个数,和输出神经元的个数,不用管batch_size。
不需要定义w和b。所有nn.Module的子类,形如nn.XXX的层,都会在实例化的同时随机生成w和b的初始值。所以实例化之后,我们就可以调用属性weight和bias来查看生成的w和b。其中w是必然会生成的,b是我们可以控制是否要生成的。在nn.Linear类中,有参数bias,默认 bias = True。如果我们希望不拟合常量b,在实例化时将参数bias设置为False即可。
其次
原因是:__call__() 该方法的功能类似于在类中重载 () 运算符,使得类实例对象可以像调用普通函数那样,以“对象名()”的形式使用。
最后是代码的思路结构:
数据清理:1得到所有的数据,对未缺省的数据列进行归一化,归一化之后恰好是均值的数据会被 置为NA,因此对NA数据置零。
2.将所有数据分为train,test,train的labels
3.对train里的数据使用分为k折,k-1折作为训练,1折作为验证用来调参
网络部分:1. 定义损失函数,这里用的是以MSE为基础的对数均方根误差。
2.定义网络,这里只要一个nn.Linear(
3.定义训练函数
4.将以上的k折作为基础进行k次训练。
5.在test上检验模型
参考: