0

我正在努力完成门课程,希望能够在春季之前完成这种入门级别的课程。这是我在这个令人难以置信的资源上的第一篇文章,并将尽我所能遵守发布格式。作为加强我的学习和致力于长期记忆的一种潜在方式,我正在我自己的数据集上尝试相同的事情,该数据集包含超过 500 个条目,其中包含与我更相关的数据,而不是虚拟数据。

我正在学习数据预处理阶段,如果我理解正确的话,您可以在其中填写缺失值并将列分成各自的 X 和 Y,以便稍后输入模型。

所以在课程示例中,它是左上角的国家数据集。然后左下角是我自己的数据数据库,我在我玩的多人游戏中保存了大约一年。它有 100 个左右的角色,您可以从 5 种不同的类别角色之间进行选择。

课程数据集(左上)个人数据集(左下 个人数据集列转换结果

产生的不同输出是怎么回事,唯一的区别是数据集(.csv 文件)?该课程的数据集看起来不错;第一列国家(文本类别)在输出中变成二进制向量,不是吗?为什么我的数据集上的输出省略了列,并产生了这些看起来很奇怪的元组,后面跟着一个看起来像随机数的东西?我尝试删除 np.array 函数,尝试在每个级别打印每个输出,但无法查看导致差异的原因。我希望在我的数据集上它将字符的名称转换为二进制向量(1s/0s 的组合?),以便计算机可以理解差异并将它们映射到适当的结果。相反,我得到了我以前从未见过的奇怪的输出。

编辑:事实证明,这些奇怪的数字组合就是所谓的“稀疏矩阵”。必须从产生 csr_array 的 type() 开始做一些研究。如果我理解我正确阅读的内容,那么里面的所有内容都会占用一列,所以我只是使用 [:] 尝试了所有行/列,我没有收到错误。

非常感谢您的时间和帮助。

编辑:多亏了这个线程,我才能完成这个数据预处理/导入/清理/阶段练习,使用我自己的约 550 行数据集进行特征缩放。

import pandas as pd
import numpy as np
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder, LabelEncoder, StandardScaler
from sklearn.model_selection import train_test_split

# IMPORT RAW DATA // ASSIGN X AND Y RAW
df = pd.read_csv('datasets/winpredictor.csv')

X = df.iloc[:, :-1].values
y = df.iloc[:, -1].values

# TRANSFORM CATEGORICAL DATA
ct = ColumnTransformer(transformers=\
[('encoder', OneHotEncoder(), [0, 1])], remainder='passthrough')
le = LabelEncoder()

X = ct.fit_transform(X)
y = le.fit_transform(y)

# SPLIT THE DATA INTO TRAINING AND TEST SETS
X_train, X_test, y_train, y_test = train_test_split(\
X, y, train_size=.8, test_size=.2, random_state=1)

# FEATURE SCALING
sc = StandardScaler(with_mean=False)

X_train[:, :] = sc.fit_transform(X_train[:, :])
X_test[:, :] = sc.transform(X_test[:, :])
4

1 回答 1

0

首先,我鼓励你继续学习这门课程,并确保你将在几周内成为一名完美的数据科学。

让我们谈谈你的问题。由于不同类型的“英雄” (我认为您有 37 个唯一值)的大小,您似乎只有可视化问题。

我将向您解释您绘制的结果。他们的程序仅向您指示与 0 不同的样本值:

  • (0,10)=1 --> 0指第一个样本,10指样本的第10个等于1的值。

  • (0,37)=5 --> 0指第一个样本,37指第37个,等于5。

ETC..

所以你的第一个样本将是这样的:

[0,0,0,0,0,0,0,0,0,0,1,.........., 5, 980,-30, 1000, 6023]

这是“Jakiro”的第一个样本的表达方式。

["Jakiro",5, 980,-30, 1000, 6023]

总而言之,前 37 个值是指您的OneHotEncoder,最后 5 个是指您的初始数值。

所以这似乎是正确的,只是由于分类变量的类的大小不同而绘制结果的另一种方式。

您可以尝试减少 X 行的数量(例如减少到 4 行),并尝试相同的过程。然后您将获得与课程类似的输出。

于 2021-01-12T09:43:45.243 回答