为什么 ColumnTransformer 使用相同的代码但不同的 .csv 文件产生不同的输出?
Why is ColumnTransformer producing a different output using the same code but different .csv files?
我正在努力完成 this 课程,希望能够在 Spring 之前达到入门级水平。这是我第一次 post 使用这个令人难以置信的资源,并将尽我最大努力符合 posting 格式。作为加强我的学习和致力于长期记忆的一种潜在方式,我正在我自己的数据集上尝试相同的事情,该数据集包含与我更相关的数据而不是虚拟数据。
超过 500 个条目
我正在了解数据预处理阶段,如果我理解正确的话,您可以在该阶段填写缺失值并将列分成各自的 X 和 Y,以便稍后输入模型。
所以在课程示例中,它是左上角的国家/地区数据集。然后左下角是我自己的数据库,我在我玩的多人游戏中保存了大约一年的数据。它有 100 个左右的角色供您选择,您可以在 5 个不同的类别角色中扮演这些角色。
Course data set (top left) personal dataset (bottom left
personal dataset column transformed results
生成的不同输出有何不同,唯一的区别是数据集(.csv 文件)?该课程的数据集看起来不错;第一列国家(文本类别)在输出中变成二元向量否?为什么我的数据集的输出省略了列,并产生了这些看起来很奇怪的元组,后面跟着一个看起来像随机数的东西?我试过删除 np.array 函数,我试过在每个级别打印每个输出,但看不出是什么导致了差异。我希望在我的数据集中,它将字符的名称转换为二进制向量(1s/0s 的组合?),以便计算机能够理解差异并将它们映射到适当的结果。相反,我得到了我以前从未见过的奇怪的输出。
编辑:原来这些奇怪的数字组合就是所谓的“稀疏矩阵”。不得不从产生 csr_array 的 type() 开始做一些研究。如果我正确理解了我阅读的内容,那么里面的所有内容都会占据一栏,所以我只是使用 [:] 尝试了所有 rows/columns,但我没有收到错误。
非常感谢您的时间和帮助。
编辑:多亏了这个线程,我才能够结束这个数据 preprocessing/import/cleaning/ 阶段练习,使用我自己的 ~ 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[:, :])
首先,我鼓励您继续学习这门课程,相信您将在几周内成为一名完美的数据科学专家。
让我们谈谈您的问题。看起来 你只是因为不同类型的“Hero”(我认为你有 37 个唯一值)的大尺寸而存在可视化问题。
我会向你解释你绘制的结果。他们编程仅向您指示与 0:
不同的样本值
(0,10)=1 --> 0指第一个样本,10指第10个
等于 1 的样本值。
(0,37)=5 --> 0指第一个样本,37指第37个,等于5.
等..
因此您的第一个示例将类似于:
[0,0,0,0,0,0,0,0,0,0,1,.........., 5, 980,-30, 1000, 6023]
《杰奇洛》第一个样本的表达方式是什么。
["Jakiro",5, 980,-30, 1000, 6023]
综上所述,前37个值是指你的OneHotEncoder
,后5个是你的初始数值
所以它似乎是正确的,只是由于分类变量 类 的大尺寸导致结果的不同绘制方式。
您可以尝试减少 X 行的数量(例如减少到 4 行),然后尝试相同的过程。那么你将得到与课程类似的输出。
我正在努力完成 this 课程,希望能够在 Spring 之前达到入门级水平。这是我第一次 post 使用这个令人难以置信的资源,并将尽我最大努力符合 posting 格式。作为加强我的学习和致力于长期记忆的一种潜在方式,我正在我自己的数据集上尝试相同的事情,该数据集包含与我更相关的数据而不是虚拟数据。
超过 500 个条目我正在了解数据预处理阶段,如果我理解正确的话,您可以在该阶段填写缺失值并将列分成各自的 X 和 Y,以便稍后输入模型。
所以在课程示例中,它是左上角的国家/地区数据集。然后左下角是我自己的数据库,我在我玩的多人游戏中保存了大约一年的数据。它有 100 个左右的角色供您选择,您可以在 5 个不同的类别角色中扮演这些角色。
Course data set (top left) personal dataset (bottom left personal dataset column transformed results
生成的不同输出有何不同,唯一的区别是数据集(.csv 文件)?该课程的数据集看起来不错;第一列国家(文本类别)在输出中变成二元向量否?为什么我的数据集的输出省略了列,并产生了这些看起来很奇怪的元组,后面跟着一个看起来像随机数的东西?我试过删除 np.array 函数,我试过在每个级别打印每个输出,但看不出是什么导致了差异。我希望在我的数据集中,它将字符的名称转换为二进制向量(1s/0s 的组合?),以便计算机能够理解差异并将它们映射到适当的结果。相反,我得到了我以前从未见过的奇怪的输出。
编辑:原来这些奇怪的数字组合就是所谓的“稀疏矩阵”。不得不从产生 csr_array 的 type() 开始做一些研究。如果我正确理解了我阅读的内容,那么里面的所有内容都会占据一栏,所以我只是使用 [:] 尝试了所有 rows/columns,但我没有收到错误。
非常感谢您的时间和帮助。
编辑:多亏了这个线程,我才能够结束这个数据 preprocessing/import/cleaning/ 阶段练习,使用我自己的 ~ 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[:, :])
首先,我鼓励您继续学习这门课程,相信您将在几周内成为一名完美的数据科学专家。
让我们谈谈您的问题。看起来 你只是因为不同类型的“Hero”(我认为你有 37 个唯一值)的大尺寸而存在可视化问题。
我会向你解释你绘制的结果。他们编程仅向您指示与 0:
不同的样本值(0,10)=1 --> 0指第一个样本,10指第10个 等于 1 的样本值。
(0,37)=5 --> 0指第一个样本,37指第37个,等于5.
等..
因此您的第一个示例将类似于:
[0,0,0,0,0,0,0,0,0,0,1,.........., 5, 980,-30, 1000, 6023]
《杰奇洛》第一个样本的表达方式是什么。
["Jakiro",5, 980,-30, 1000, 6023]
综上所述,前37个值是指你的OneHotEncoder
,后5个是你的初始数值
所以它似乎是正确的,只是由于分类变量 类 的大尺寸导致结果的不同绘制方式。
您可以尝试减少 X 行的数量(例如减少到 4 行),然后尝试相同的过程。那么你将得到与课程类似的输出。