[899]数值特征-对数据进行log变化

对于一些标签和特征来说,分布不一定符合正态分布,而在实际的运算过程中则需要数据能够符合正态分布

因此我们需要对特征进行log变化,使得数据在一定程度上可以符合正态分布

进行log变化,就是对数据使用np.log(data+1) 加上1的目的是为了防止数据等于0,而不能进行log变化

代码:

第一步:导入数据

第二步:对收入特征做直方图,同时标出中位数所在的位置,即均值

第三步:对收入特征做log变化,使用np.log(data+1)

第四步:对log收入特征做直方图,标出中位数线的位置,即均值

结论:我们可以发现变化后的特征在一定程度上更加接近正态分布

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# 第一步导入数据
ffc_survey_df = pd.read_csv('datasets/fcc_2016_coder_survey_subset.csv', encoding='utf-8')

# 第二步对数据的收入做直方图
fig, ax = plt.subplots()
ffc_survey_df['Income'].hist(color='#A9C5D3', bins=30)
plt.axvline(ffc_survey_df['Income'].quantile(), color='r', label='Binary line')
plt.legend(fontsize=18, loc='best')
ax.set_xlabel('Income', fontsize=12)
ax.set_ylabel('Frequency', fontsize=12)
ax.set_title('Income_hist', fontsize=12)
plt.show()

image.png

# 第三步:对收入的数据进行log变化
ffc_survey_df['log_income'] = np.log(ffc_survey_df['Income'].values+1)
print(ffc_survey_df[['Income', 'log_income']].head())

image.png

log前后的数据

# 第四步:对log变化后的数据画出直方图
fig, ax = plt.subplots()
ffc_survey_df['log_income'].hist(color='#A9C5D3', bins=30)
plt.axvline(ffc_survey_df['log_income'].quantile(), color='r', label='Binary line')
plt.legend(fontsize=18, loc='best')
ax.set_xlabel('log_Income', fontsize=12)
ax.set_ylabel('Frequency', fontsize=12)
ax.set_title('Income_hist', fontsize=12)
plt.show()

image.png

来源:https://www.cnblogs.com/my-love-is-python/p/10322080.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
利用Lyapunov指数对数据进行混沌分析的一般步骤如下: 1. 读取数据进行预处理,包括滤波、降采样、归一化等处理,使得数据具有一定的平稳性和可比性。 2. 建立一个动力系统的ODE方程或者离散映射,将数据映射到相空间中,并进行重构,得到高维的状态向量。 3. 使用Lyapunov指数计算方法,计算状态向量在相空间中的局部指数,对于混沌系统,Lyapunov指数应该是正的,并且随时间增长而增大。 4. 根据计算得到的Lyapunov指数,判断数据是否具有混沌特性。如果Lyapunov指数存在正值,且变化率很大,则说明数据具有混沌特性。 5. 进一步对混沌数据进行分析,包括吸引子重构、Lyapunov指数谱、分岔图等分析方法。 以下是一个简单的Matlab代码示例,用于对Mackey-Glass时滞系统进行混沌分析: ```matlab % 读取数据进行预处理 data = load('mackeyglass.mat'); data = data.y(1:2000); % 降采样 data = data - mean(data); % 去均值 data = data / std(data); % 归一化 % 定义Mackey-Glass时滞系统的ODE方程 tau = 17; a = 0.2; b = 0.1; n = length(data); function dxdt = mackeyglass(t, x) tau = 17; a = 0.2; b = 0.1; if t < tau x_tau = 0; else x_tau = x(t-tau); end dxdt = -b*x(t) + a*x_tau/(1+x_tau^10); end % 将数据映射到相空间中,得到高维的状态向量 m = 5; % 重构维数 X = zeros(n-tau-m+1, m); for i = 1:n-tau-m+1 X(i, :) = data(i:i+m-1); end % 计算Lyapunov指数 v = rand(m, 1); v = v / norm(v); L = zeros(n-tau-m+1, 1); for i = 1:n-tau-m+1 J = zeros(m); for j = 1:m J(:, j) = numjac(@mackeyglass, X(i, :)', j)'; end [Q, R] = qr(J*v); v = Q(:, end); L(i) = log(norm(v)); v = v / norm(v); end % 绘制Lyapunov指数曲线 plot(L); xlabel('Time'); ylabel('Lyapunov exponent'); ``` 注意,Lyapunov指数的计算需要考虑数值误差和数值稳定性等因素,需要进行适当的数值处理和调整。此外,对于不同的数据和系统,需要根据实际情况进行参数的调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值