2 回答
TA贡献1824条经验 获得超5个赞
我举了一些如何使用numpy的例子,希望它能回答你的问题。通常,对于数值运算,对于numpy,对于更通用的运算(字符串,聚合等),则用于熊猫。一般来说,pandas很适合准备数据并将其传递到更低级别的数据结构,例如numpy到更重的计算
你问1)使用哪种数据结构?去多维数组在麻木
2)如何获取列数?对于一个 np.数组,你只需要使用 .shape,它是 (dim1, dim2 .... ) 的元组通常 (n_rows, cols)
3)是一个1维的np.数组,这就是为什么你有这样的形状(n_rows,),所以如果你打印y,你会看到一个矢量...所以你只有一列。np.数组在开始时可能会令人困惑,因为允许您创建比向量或矩阵(如张量)更通用的东西,这将是形状(x,y,z)的np.数组。因此,谈论形状的np.数组的列是有道理的(n_rows,n_cols)
4) 如果列 std() 为 0,则所有实例都是相同的,因此基本上没有意义将此规范化应用于 1 列。(只需跳过它)
更详细地说,通常标准化列的目标是使列中的值落在值范围内。即介于 0 和 1 之间。例如,这是在机器学习中完成的,以避免具有较大值的训练数据的列(特征)对模型的影响大于具有较小值的模型。您可以注意到,您正在应用的规范化不会强制列位于 [0, 1] 中。因此,强制进行归一化,并且不会像其他规范化(除非max和min = 0)那样给出除法误差将是:
x_raw = (x_raw - x_raw.min())/(x_raw.max() - x_raw.min())
print(x_raw)
import numpy as np
def norm_equ(x, y):
temp1 = np.linalg.pinv(np.dot(np.transpose(x), x))
temp2 = np.dot(temp1, np.transpose(x))
theta = np.dot(temp2, y)
return theta
# create a matrix 50x10 random matrix
x_raw = np.random.random([50,10])
y = np.random.random([50])
print(x_raw.shape) #-----> (50, 10)
print(y.shape) #-----> (50, ) a vec "50 x 1"
# transform raw input
x_norm = (x_raw - x_raw.mean())/x_raw.std()
x_0 = np.ones((x_norm.shape[0],1))
x_input = np.hstack((x_0, x_norm))
print(x_input.shape) #-----> (51, 11)
theta = norm_equ(x_input, y)
print(theta.shape) #-----> (11, )
# load from csv file
arrays_from_file = np.loadtxt(fname="dummy.csv",
delimiter=",",
skiprows=1)
y = np.random.random([arrays_from_file.shape[0]])
print(arrays_from_file.shape) #-----> (2, 6)
print(y.shape) #-----> (2, )
another_theta = norm_equ(arrays_from_file, y)
print(another_theta.shape) #-----> (6, )
TA贡献1796条经验 获得超4个赞
为什么要将 x 转换为数据帧?似乎它应该只是一个numpy数组,给定其余的代码。
如果你想要一个有三列的数据帧,那么它将是
df = pd.DataFrame({'x_input': x, 'x_0': 1})
df['x_input_norm'] = df['x_input'] - df['x_input'].mean() / df['x_input'].std()
添加回答
举报