需要改进蟒蛇中的正态方程

我是Python的新手,想为正常方程编写代码。代码如下,请提供一些关于编码的建议和反馈。谢谢!

def norm_equ(x, y):
    x_input = pd.DataFrame(x)
    x_input = (x_input - x_input.mean())/x_input.std()
    x_0 = np.ones((len(x_input), 1))
    x_new = np.hstack((x_0, x_input))
    temp1 = np.linalg.pinv(np.dot(np.transpose(x_new), x_new))
    temp2 = np.dot(temp1, np.transpose(x_new))
    theta = np.dot(temp2, y)    return theta

我的问题是关于:如何在数据中添加$ X_0 $?除了 data.frame 数据结构之外,还有其他工作方式吗?提前感谢您的帮助。


一只斗牛犬
浏览 66回答 2
2回答

沧海一幻觉

我举了一些如何使用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 npdef 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 matrixx_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 inputx_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 filearrays_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, )

SMILET

为什么要将 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()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python