python - Python中的正规方程需要改进
问题描述
我是 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 数据结构之外,还有其他工作方式吗?预先感谢您的帮助。
解决方案
我举了一些如何使用 numpy 的例子,希望它能回答你的问题。一般来说,对于数值运算,请使用 numpy,而对于更通用的操作(字符串、聚合等),请使用 pandas。一般来说,pandas 适合准备数据并将其传递给更底层的数据结构,例如 numpy 以进行更重的计算
您问 1) 使用哪种数据结构?在 numpy 中查找多维数组
2)如何获得列数?对于 np.array 你只需要使用 .shape,它通常是 (dim1, dim2 .... ) 的元组 (n_rows, cols)
3) 是一维的 np.array,这就是为什么你有这样的形状 (n_rows, ) 所以如果你打印 y 你会看到一个向量......所以你只有一列。np.arrays 一开始可能会令人困惑,因为它允许您创建比向量或矩阵更通用的东西,例如张量,这将是一个形状为 (x, y, z) 的 np.array。所以谈论 np.arrays of shape (n_rows, n_cols) 的列是有意义的
4) 如果列 std() 为 0,则所有实例都是相同的,所以基本上没有必要将此归一化应用于一列。(跳过它)
更详细地说,通常标准化列的目标是使该列中的值落在一个值范围内。即介于 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, )
推荐阅读
- google-bigquery - 尝试在我们中部 1 区域运行数据流作业,但源和目标位于 asia-south1
- pine-script - 为什么在 Tradingview pine 脚本中战略交易和绘图之间存在滑移?
- api - 如何使用 JMeter 创建自动化测试流程?
- wpf - Windows 上存储的 Xamarin.Forms 应用程序属性在哪里
- sql - SQL双重条件SELECT而不在列中重复值
- xml - Shell grep 基于标签的 XML 内容
- intellij-idea - 为什么子类的代码完成在角度模板中不起作用?
- node.js - url 未编码 s3 getSignedUrl
- c# - 具有非导出函数的 DllImport。为什么它有效?
- jenkins - 在我的詹金斯主服务器中,磁盘已满,所以我想清理空间。你能帮帮我吗