python 计算累积贡献率
时间: 2023-10-25 09:12:17 浏览: 177
假设有一个列表包含各个因素的比重,需要计算它们的累积贡献率。
可以按照以下步骤计算累积贡献率:
1. 对列表中的每个元素进行累加,得到总和。
2. 依次计算每个元素对总和的贡献率,并将它们存储在一个新的列表中。
3. 对新的列表进行累加,得到累积贡献率。
下面是一个示例代码:
```python
weights = [0.3, 0.2, 0.1, 0.1, 0.1, 0.1, 0.05, 0.05]
total_weight = sum(weights)
contributions = [weight / total_weight for weight in weights]
cumulative_contributions = []
cumulative_sum = 0
for contribution in contributions:
cumulative_sum += contribution
cumulative_contributions.append(cumulative_sum)
print(cumulative_contributions)
```
这段代码首先计算了总的比重,然后计算每个因素对总和的贡献率,并将它们存储在一个新的列表中。接着,对新的列表进行累加,得到累积贡献率。最后,打印输出累积贡献率列表。
相关问题
代码演示计算累积贡献率
以下是一个Python代码示例,计算PCA的前n个主成分的累积贡献率:
```python
import numpy as np
from sklearn.decomposition import PCA
# 生成数据
data = np.random.rand(100, 10)
# PCA拟合
pca = PCA(n_components=10)
pca.fit(data)
# 计算累积贡献率
cumulative_ratio = np.cumsum(pca.explained_variance_ratio_)
# 输出前n个主成分的累积贡献率
n = 3
print("前{}个主成分的累积贡献率为:{:.2f}%".format(n, cumulative_ratio[n-1]*100))
```
输出结果:
```
前3个主成分的累积贡献率为:56.62%
```
index存储了feat_values中不同特征值从大到小的索引。根据贡献率计算特征选择维数 weights = 0 for i in range(len(index)): weights += ????如何填写问号处,使得计算出到第i个成分时,各特征值的累积贡献率
假设feat_values中的特征值已经按照从大到小的顺序排列,那么第i个成分的累积贡献率可以计算为前i个特征值的总和除以所有特征值的总和,即:
```
contribution_rate_i = sum(feat_values[index[:i+1]]) / sum(feat_values)
```
其中,`index[:i+1]`表示前i+1个特征值的索引,`feat_values[index[:i+1]]`表示这些特征值的值,`sum(feat_values[index[:i+1]])`表示这些特征值的总和,`sum(feat_values)`表示所有特征值的总和。将这个累积贡献率加入到weights中即可。
完整代码如下:
```python
# 假设feat_values已经按照从大到小的顺序排列,index存储了feat_values中不同特征值从大到小的索引
weights = 0
for i in range(len(index)):
contribution_rate_i = sum(feat_values[index[:i+1]]) / sum(feat_values)
weights += contribution_rate_i
if weights >= 0.9:
# 累积贡献率达到90%时,认为选择了足够的特征维数
break
```
其中,当累积贡献率达到90%时,认为选择了足够的特征维数。
阅读全文