【发布时间】:2021-01-20 07:55:13
【问题描述】:
我正在为 Python 中的机器学习课程做作业。我昨天才开始学习python,所以我不知道python中使用的实践。
我的部分任务是从 csv(2D 数组)加载数据,我们称之为 arr_2d 并对其进行规范化。
我在网上找到了sklearn 和numpy 解决方案,但他们希望输入二维数组。
我在加载 arr_2d 后的方法是将它们解析为对象数组 (data: [HealthRecord])。
我的解决方案是类似这样的代码(注意:有点伪代码)
result = [] # 2D array of property values
for key in ['age','height','weight',...]:
tmp = list(map(lambda item: getattr(key, item), data))
result.append(tmp)
结果现在包含 3 * data.length 项目,我将使用 sklearn 规范化我的 result 数组中的单行,然后将其旋转回来并解析规范化为 HealthRecord。
我认为这过于复杂,我希望看到一个更简单的方法,例如将[HealthRecord] 发送到sklearn.normalize
下面的代码显示了我的(简化的)加载和解析:
class Person:
age: int
height: int
weight: int
def arr_2_obj(data: [[]]) -> Person:
person = Person()
person.age = data[0]
person.height = data[1]
person.weight = data[2]
return person
# age (days), height (cm), weight (kg)
input = [
[60*365, 125, 65],
[30*365, 195, 125],
[13*365, 116, 53],
[16*365, 164, 84],
[12*365, 125, 96],
[10*365, 90, 46],
]
parsed = []
for row in input:
parsed.append(arr_2_obj(row))
注意:Person 类是 HealthRecord
感谢您的任何意见或见解。
编辑:错字 sci-learn -> sklearn
【问题讨论】:
-
我想补充一点,解析后的 CSV 的实际长度是 70000*13。此外,我正在将数据解析为类以便于操作。加载数据集后,我根据不正确或超出范围的值清理行并将文本值编码为数字。
-
这能回答你的问题吗? How to normalize an array in NumPy?
-
@Joe 不,它没有。我知道您提到的线程,正如我在问题中所说,我正在寻找另一种方法。所述线程将二维数组视为输入,而我想传递对象数组进行规范化。
标签: python python-3.x