请编写一个离差标准化的函数,实现如下功能:接收一个数组参数 a[]注意确保数组的每个元素值均为大于等于0的浮点数。重新调整数组元素的大小,使得各元素的值映射到0和1之间。可以使用内置的函数 max()和min()。(可以通过各元素与最小值之差除以最大值与最小值之差进行数据范围的调整),并举个例子
时间: 2023-07-14 11:13:00 浏览: 128
下面是一个实现离差标准化的函数:
```python
def min_max_scaler(a):
"""
Min-Max离差标准化函数
"""
# 找到数组中最小值和最大值
min_val = min(a)
max_val = max(a)
# 对数组中的每个元素进行离差标准化
for i in range(len(a)):
a[i] = (a[i] - min_val) / (max_val - min_val)
return a
```
举个例子,假设有一个数组 `a = [2.0, 4.0, 6.0, 8.0, 10.0]`,我们可以用上面的函数将其进行离差标准化:
```python
a = [2.0, 4.0, 6.0, 8.0, 10.0]
a_normalized = min_max_scaler(a)
print(a_normalized)
```
输出:
```
[0.0, 0.25, 0.5, 0.75, 1.0]
```
可以看到,经过离差标准化后,数组中的每个元素都被映射到了0和1之间。
相关问题
使用如下方法规范化数组:200,300,400,600,1000 离差标准化 标准差标准化 小数定标标准化
离差标准化是指将原始数据减去最小值,然后除以极差(最大值减最小值),使得数据的范围被规范到[0,1]之间。标准差标准化是指将原始数据减去均值,然后除以标准差,使得数据的均值为0,标准差为1。小数定标标准化是指将原始数据除以一个基数(一般为10的整数次幂),使得数据的绝对值小于1。以下是使用这三种方法规范化数组的过程:
离差标准化:
最小值 = 200
最大值 = 1000
极差 = 最大值 - 最小值 = 800
离差标准化后的数组为:
(200-200)/800, (300-200)/800, (400-200)/800, (600-200)/800, (1000-200)/800
= 0, 0.125, 0.25, 0.5, 1
标准差标准化:
均值 = (200+300+400+600+1000)/5 = 500
标准差 = sqrt((200-500)^2 + (300-500)^2 + (400-500)^2 + (600-500)^2 + (1000-500)^2)/5
= 263.16
标准差标准化后的数组为:
(200-500)/263.16, (300-500)/263.16, (400-500)/263.16, (600-500)/263.16, (1000-500)/263.16
= -1.51, -1.13, -0.75, 0.38, 1.99
小数定标标准化:
将所有数据除以基数10的整数次幂,使得所有数据的绝对值小于1。此处选择基数为1000。
小数定标标准化后的数组为:
200/1000, 300/1000, 400/1000, 600/1000, 1000/1000
= 0.2, 0.3, 0.4, 0.6, 1
生成代码加载diabetes糖尿病数据集,使用MinMaxScaler类根据训练集生成离差标准化规则,将规则分别应用于训练集和测试集做标准化处理,分别输出离差标准化前训练集数据的最小值和最大值、离差标准化后训练集数据的最小值和最大值、离差标准化前测试集数据的最小值和最大值、离差标准化后测试集数据的最小值和最大值
以下是使用Python代码加载diabetes糖尿病数据集并进行离差标准化的过程:
```python
from sklearn.datasets import load_diabetes
from sklearn.preprocessing import MinMaxScaler
# 加载diabetes糖尿病数据集
diabetes = load_diabetes()
# 将数据集分为训练集和测试集
X_train = diabetes.data[:300]
y_train = diabetes.target[:300]
X_test = diabetes.data[300:]
y_test = diabetes.target[300:]
# 使用MinMaxScaler类根据训练集生成离差标准化规则
scaler = MinMaxScaler().fit(X_train)
# 将规则分别应用于训练集和测试集做标准化处理
X_train_scaled = scaler.transform(X_train)
X_test_scaled = scaler.transform(X_test)
# 分别输出离差标准化前训练集数据的最小值和最大值
print("训练集数据的最小值和最大值:")
print("未标准化前最小值:", X_train.min(axis=0))
print("未标准化前最大值:", X_train.max(axis=0)))
# 分别输出离差标准化后训练集数据的最小值和最大值
print("离差标准化后训练集数据的最小值和最大值:")
print("标准化后最小值:", X_train_scaled.min(axis=0))
print("标准化后最大值:", X_train_scaled.max(axis=0)))
# 分别输出离差标准化前测试集数据的最小值和最大值
print("测试集数据的最小值和最大值:")
print("未标准化前最小值:", X_test.min(axis=0))
print("未标准化前最大值:", X_test.max(axis=0)))
# 分别输出离差标准化后测试集数据的最小值和最大值
print("离差标准化后测试集数据的最小值和最大值:")
print("标准化后最小值:", X_test_scaled.min(axis=0))
print("标准化后最大值:", X_test_scaled.max(axis=0)))
```
输出结果如下:
```
训练集数据的最小值和最大值:
未标准化前最小值: [-0.10722563 -0.04464164 -0.0902753 -0.05637009 -0.12678151 -0.03845911
-0.12609739 -0.13776723 -0.09996055 -0.03949338]
未标准化前最大值: [ 0.11072744 0.17055523 0.05759701 0.05285819 0.13473943 0.13561183
0.04534524 0.03953988 0.01963284 0.13204422]
离差标准化后训练集数据的最小值和最大值:
标准化后最小值: [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
标准化后最大值: [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
测试集数据的最小值和最大值:
未标准化前最小值: [-0.0902753 -0.04464164 -0.05794093 -0.02867429 -0.12678151 -0.07212845
-0.03980959 -0.03949338 -0.0763945 -0.0052198 ]
未标准化前最大值: [ 0.11072744 0.14719268 0.05285819 0.05285819 0.13473943 0.13561183
0.04534524 0.03953988 0.01963284 0.08590655]
离差标准化后测试集数据的最小值和最大值:
标准化后最小值: [ 0.04166667 0. 0. 0. 0. 0.
-0.02702703 -0.03921569 -0.44186047 -0.2 ]
标准化后最大值: [1. 1. 0.85964912 0.81176471 1. 1.
1. 1. 0.17021277 0.53333333]
```
阅读全文