我试图理解数据帧值的标准化。这是著名灾难(即泰坦尼克号)的场景,这是查询的代码和结果:
dftitanic.groupby('Fsize')['Survived'].value_counts(normalize=False).reset_index(name='perc')
结果:
Fsize Survived perc
0 1 0 374
1 1 1 163
2 2 1 89
3 2 0 72
4 3 1 59
5 3 0 43
6 4 1 21
7 4 0 8
8 5 0 12
9 5 1 3
10 6 0 19
11 6 1 3
12 7 0 8
13 7 1 4
14 8 0 6
15 11 0 7
如果我使用
.value_counts(normalize=True)
,结果将是:
dftitanic.groupby('Fsize')['Survived'].value_counts(normalize=True).reset_index(name='perc')
Fsize Survived perc
0 1 0 0.696462
1 1 1 0.303538
2 2 1 0.552795
3 2 0 0.447205
4 3 1 0.578431
5 3 0 0.421569
6 4 1 0.724138
7 4 0 0.275862
8 5 0 0.800000
9 5 1 0.200000
10 6 0 0.863636
11 6 1 0.136364
12 7 0 0.666667
13 7 1 0.333333
14 8 0 1.000000
15 11 0 1.000000
数据来自
describe()
:
Fsize Survived Perc
count 16.0000 16.000000 16.000000
mean 4.6875 0.437500 55.687500
std 2.7500 0.512348 95.378347
min 1.0000 0.000000 3.000000
25% 2.7500 0.000000 6.750000
50% 4.5000 0.000000 15.500000
75% 6.2500 1.000000 62.250000
max 11.0000 1.000000 374.000000
从https://stackoverflow.com/a/41532180,我得到了以下方法:
归一化_df=(df-df.mean())/df.std()
归一化_df=(df-df.min())/(df.max()-df.min()
但是,从
describe()
的结果来看,上述两种方法与.values_counts(normalize=True)
的结果并不相符。
问题:.value_counts(normalize=True)
关于机器学习中规范化的文章,区分 Pandas 中的“规范化”参数和机器学习中的规范化技术至关重要。在 Pandas 中,“归一化”专门用于计算组内的百分比,而机器学习中的归一化是指将特征缩放到一定范围(通常在 0 到 1 之间),以确保均匀性并防止某些特征因其规模而主导模型。另一方面,标准化涉及将数据转换为均值 0 和标准差 1,有助于比较和解释不同的特征。
总之,您提供的文章展示了机器学习中使用的 Standardization() 和 Normalization() 的数学直觉,这与您使用“标准化”的概念不同。这是 pandas 库中使用的参数,另一方面,本文显示了在将数据执行到算法(即数据预处理)之前使用的两种转换类型的数学公式,以便机器轻松解释附近以获得准确的结果。这两种技术都属于 scikit-learn (sklearn) 库。从 sklearn.preprocessing 导入 StandardScaler、MinMaxScaler。
如果您仍有疑问,请随时联系。