数据预处理——概率分布形式 C++带类完整实现及案例
时间: 2023-11-17 12:05:41 浏览: 38
数据预处理中,概率分布形式常用于对数据进行归一化处理。下面是一个C++带类的完整实现及案例:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
class ProbabilityDistribution {
private:
vector<double> data; // 数据
double mean = 0; // 均值
double variance = 0; // 方差
public:
// 构造函数
ProbabilityDistribution(vector<double> data) {
this->data = data;
calculateMean();
calculateVariance();
}
// 计算均值
void calculateMean() {
double sum = 0;
for (double d : data) {
sum += d;
}
mean = sum / data.size();
}
// 计算方差
void calculateVariance() {
double sum = 0;
for (double d : data) {
sum += pow(d - mean, 2);
}
variance = sum / data.size();
}
// 获取均值
double getMean() {
return mean;
}
// 获取方差
double getVariance() {
return variance;
}
// 归一化处理
vector<double> normalize() {
vector<double> result;
for (double d : data) {
result.push_back((d - mean) / sqrt(variance));
}
return result;
}
};
int main() {
vector<double> data = {1.0, 2.0, 3.0, 4.0, 5.0};
ProbabilityDistribution pd(data);
cout << "Mean: " << pd.getMean() << endl;
cout << "Variance: " << pd.getVariance() << endl;
vector<double> normalizedData = pd.normalize();
for (double d : normalizedData) {
cout << d << " ";
}
cout << endl;
return 0;
}
```
在上面的代码中,ProbabilityDistribution是一个概率分布类,包含了数据、均值、方差和相关的计算方法。在main函数中,我们创建了一个包含五个元素的数据向量,然后使用这个向量创建了一个ProbabilityDistribution对象。我们可以使用getMean和getVariance方法获取均值和方差,使用normalize方法将数据进行归一化处理。
注意,这里的归一化处理使用的是Z-score标准化方法,即将每个数据减去均值,再除以标准差。这样处理后,数据的均值为0,标准差为1。
运行上面的代码,输出结果如下:
```
Mean: 3
Variance: 2
-1.41421 -0.707107 0 0.707107 1.41421
```
可以看到,均值为3,方差为2,归一化后的数据已经变成了均值为0,标准差为1的形式。