数据预处理——区间缩放 C++实现及案例
时间: 2023-10-27 08:07:23 浏览: 145
数据导入与预处理-jupyter练习题二-pandas
数据预处理中的区间缩放是一种常见的方法,用于将数据的范围缩放到指定的区间内,常用于数据归一化等场景。C++中可以通过以下方式实现区间缩放:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void interval_scaling(vector<double>& data, double new_min, double new_max) {
double old_min = *min_element(data.begin(), data.end());
double old_max = *max_element(data.begin(), data.end());
double old_range = old_max - old_min;
double new_range = new_max - new_min;
for (auto& d : data) {
d = ((d - old_min) / old_range) * new_range + new_min;
}
}
int main() {
vector<double> data = {1.0, 2.0, 3.0, 4.0, 5.0};
interval_scaling(data, 0.0, 1.0);
for (auto d : data) {
cout << d << " ";
}
cout << endl;
return 0;
}
```
上述代码实现了将数据范围缩放到 [0.0, 1.0] 的过程。该函数接受一个 double 类型的 vector,和目标区间的最小值和最大值作为输入参数,函数内部通过计算数据的最小值、最大值和原数据范围与目标范围之间的比例关系,实现了区间缩放的过程。
接下来,我们通过一个案例来演示区间缩放的应用。假设我们有一组身高数据,需要将其范围缩放到 [160.0, 180.0] 区间内:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void interval_scaling(vector<double>& data, double new_min, double new_max) {
double old_min = *min_element(data.begin(), data.end());
double old_max = *max_element(data.begin(), data.end());
double old_range = old_max - old_min;
double new_range = new_max - new_min;
for (auto& d : data) {
d = ((d - old_min) / old_range) * new_range + new_min;
}
}
int main() {
vector<double> height = {165.0, 172.0, 178.0, 170.0, 175.0};
interval_scaling(height, 160.0, 180.0);
for (auto h : height) {
cout << h << " ";
}
cout << endl;
return 0;
}
```
运行结果为:
```
160.714 166.071 172.857 167.857 170.714
```
可以看到,经过区间缩放后,数据的范围已经被缩放到了目标区间内。
阅读全文