Python数据归一化处理案例代码
时间: 2023-12-03 12:01:50 浏览: 31
以下是Python数据归一化处理案例代码:
```python
import numpy as np
from sklearn.preprocessing import MinMaxScaler
#生成随机数据
data = np.random.randint(0,100,(10,2))
print("原始数据:")
print(data)
#使用MinMaxScaler进行归一化处理
scaler = MinMaxScaler()
scaled_data = scaler.fit_transform(data)
print("归一化后的数据:")
print(scaled_data)
```
以上代码中,我们使用了NumPy库生成了一个10行2列的随机数数组,作为原始数据。然后,我们使用Scikit-Learn库中的MinMaxScaler类进行归一化处理,最后输出归一化后的数据。
相关问题
python关于lstm代码案例
下面是一个使用LSTM模型进行股票预测的Python代码案例:
```python
# 导入必要的库
import numpy as np
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from keras.models import Sequential
from keras.layers import Dense, LSTM, Dropout
# 加载数据
data = pd.read_csv('data.csv')
data = data.dropna()
data = data.iloc[:, 1:2].values
# 数据预处理
scaler = MinMaxScaler(feature_range=(0,1))
data = scaler.fit_transform(data)
train_size = int(len(data) * 0.7) # 训练数据集占总数据集的比例
test_size = len(data) - train_size
train, test = data[0:train_size,:], data[train_size:len(data),:]
def create_dataset(dataset, look_back=1):
dataX, dataY = [], []
for i in range(len(dataset)-look_back-1):
a = dataset[i:(i+look_back), 0]
dataX.append(a)
dataY.append(dataset[i + look_back, 0])
return np.array(dataX), np.array(dataY)
look_back = 60 # 每个样本包含前60天的数据
trainX, trainY = create_dataset(train, look_back)
testX, testY = create_dataset(test, look_back)
# 构建LSTM模型
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(look_back, 1)))
model.add(Dropout(0.2))
model.add(LSTM(50, return_sequences=True))
model.add(Dropout(0.2))
model.add(LSTM(50))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
# 训练模型
model.fit(trainX, trainY, epochs=100, batch_size=32, verbose=2)
# 预测数据
trainPredict = model.predict(trainX)
testPredict = model.predict(testX)
trainPredict = scaler.inverse_transform(trainPredict)
trainY = scaler.inverse_transform([trainY])
testPredict = scaler.inverse_transform(testPredict)
testY = scaler.inverse_transform([testY])
# 可视化结果
import matplotlib.pyplot as plt
trainPredictPlot = np.empty_like(data)
trainPredictPlot[:, :] = np.nan
trainPredictPlot[look_back:len(trainPredict)+look_back, :] = trainPredict
testPredictPlot = np.empty_like(data)
testPredictPlot[:, :] = np.nan
testPredictPlot[len(trainPredict)+(look_back*2)+1:len(data)-1, :] = testPredict
plt.plot(scaler.inverse_transform(data))
plt.plot(trainPredictPlot)
plt.plot(testPredictPlot)
plt.show()
```
在代码中,我们首先加载了一个股票数据集,并进行了数据预处理,其中使用了MinMaxScaler对数据进行了归一化处理。然后,我们将数据集分为训练集和测试集,每个样本包含前60天的数据。接下来,我们使用Keras中的LSTM层构建了一个LSTM模型,并通过fit()函数训练了模型。最后,我们使用模型对训练集和测试集进行了预测,并将结果可视化出来,可以看到我们的模型对股票趋势的预测效果还是不错的。
利用python进行音频数据增强各种方法案例
音频数据增强是指通过一系列的技术手段,对原始音频数据进行处理,从而得到更多的音频数据,以达到提高模型性能的目的。下面介绍一些常见的音频数据增强方法及其Python实现。
1. 噪声添加
在训练模型时,我们经常会遇到噪声环境的情况,因此在数据增强中添加噪声是很有必要的。常见的噪声类型有高斯噪声、均匀噪声、白噪声等。
代码示例:
```python
import numpy as np
import scipy.io.wavfile as wavfile
def add_noise(wav, noise_type='gaussian', snr=0.5):
# 读取音频文件
sample_rate, signal = wavfile.read(wav)
signal = signal / np.max(np.abs(signal)) # 归一化
noise = np.zeros_like(signal)
if noise_type == 'gaussian':
noise = np.random.normal(0, 1, len(signal))
elif noise_type == 'uniform':
noise = np.random.uniform(-1, 1, len(signal))
elif noise_type == 'white':
noise = np.random.randn(len(signal))
else:
raise ValueError("Unsupported noise type!")
noise = noise / np.max(np.abs(noise)) # 归一化
# 计算信噪比
signal_power = np.sum(signal ** 2)
noise_power = np.sum(noise ** 2)
if noise_power == 0:
return signal
k = signal_power / noise_power
# 添加噪声
noisy_signal = signal + np.sqrt(k * (10 ** (-snr / 10))) * noise
return noisy_signal
# 示例
noisy_signal = add_noise('example.wav', noise_type='gaussian', snr=0.5)
wavfile.write('example_noisy.wav', sample_rate, noisy_signal)
```
2. 变速变调
变速变调可以增加数据样本的多样性,同时也可以避免过拟合。常见的变速变调方法有随机变速、随机变调等。
代码示例:
```python
import librosa
def pitch_shift(wav, shift_steps=2):
# 读取音频文件
signal, sample_rate = librosa.load(wav, sr=None)
# 随机变调
shifted_signal = librosa.effects.pitch_shift(signal, sr=sample_rate, n_steps=shift_steps)
return shifted_signal
def time_stretch(wav, rate=1.2):
# 读取音频文件
signal, sample_rate = librosa.load(wav, sr=None)
# 随机变速
stretched_signal = librosa.effects.time_stretch(signal, rate)
return stretched_signal
# 示例
shifted_signal = pitch_shift('example.wav', shift_steps=2)
wavfile.write('example_shifted.wav', sample_rate, shifted_signal)
stretched_signal = time_stretch('example.wav', rate=1.2)
wavfile.write('example_stretched.wav', sample_rate, stretched_signal)
```
3. 音量调整
音量调整可以增加数据的多样性,同时也可以避免过拟合。常见的音量调整方法有随机增益、随机削弱等。
代码示例:
```python
def random_gain(wav, gain_range=(0.5, 1.5)):
# 读取音频文件
signal, sample_rate = librosa.load(wav, sr=None)
# 随机增益
gain = np.random.uniform(gain_range[0], gain_range[1])
gain_signal = signal * gain
# 归一化
gain_signal = gain_signal / np.max(np.abs(gain_signal))
return gain_signal
def random_cut(wav, cut_range=(0.5, 1.0)):
# 读取音频文件
signal, sample_rate = librosa.load(wav, sr=None)
# 随机削弱
cut = np.random.uniform(cut_range[0], cut_range[1])
cut_signal = signal * cut
# 归一化
cut_signal = cut_signal / np.max(np.abs(cut_signal))
return cut_signal
# 示例
gain_signal = random_gain('example.wav', gain_range=(0.5, 1.5))
wavfile.write('example_gain.wav', sample_rate, gain_signal)
cut_signal = random_cut('example.wav', cut_range=(0.5, 1.0))
wavfile.write('example_cut.wav', sample_rate, cut_signal)
```
以上是几种常见的音频数据增强方法及其Python实现,可以根据具体任务需求进行选择和组合。