Xt_train, Xt_test, yt_train, yt_test = train_test_split(data2, yt, test_size=0.9, random_state=60)random_state取值一般取多少比较好
时间: 2023-12-04 10:41:16 浏览: 78
在使用train_test_split函数时,random_state参数用于控制数据集的随机状态。如果不设置random_state参数,每次运行程序时,将会得到不同的训练集和测试集。通常情况下,我们可以将random_state设置为一个固定的整数,以确保每次运行程序时都得到相同的训练集和测试集。这个整数的取值并没有固定的规则,只要保证每次运行程序时都使用相同的值即可。常见的取值有0、1、42、2022等。
相关问题
import pandas as pd data = pd.read_csv(C:\Users\Administrator\Desktop\pythonsjwj\weibo_senti_100k.csv') data = data.dropna(); data.shape data.head() import jieba data['data_cut'] = data['review'].apply(lambda x: list(jieba.cut(x))) data.head() with open('stopword.txt','r',encoding = 'utf-8') as f: stop = f.readlines() import re stop = [re.sub(' |\n|\ufeff','',r) for r in stop] data['data_after'] = [[i for i in s if i not in stop] for s in data['data_cut']] data.head() w = [] for i in data['data_after']: w.extend(i) num_data = pd.DataFrame(pd.Series(w).value_counts()) num_data['id'] = list(range(1,len(num_data)+1)) a = lambda x:list(num_data['id'][x]) data['vec'] = data['data_after'].apply(a) data.head() from wordcloud import WordCloud import matplotlib.pyplot as plt num_words = [''.join(i) for i in data['data_after']] num_words = ''.join(num_words) num_words= re.sub(' ','',num_words) num = pd.Series(jieba.lcut(num_words)).value_counts() wc_pic = WordCloud(background_color='white',font_path=r'C:\Windows\Fonts\simhei.ttf').fit_words(num) plt.figure(figsize=(10,10)) plt.imshow(wc_pic) plt.axis('off') plt.show() from sklearn.model_selection import train_test_split from keras.preprocessing import sequence maxlen = 128 vec_data = list(sequence.pad_sequences(data['vec'],maxlen=maxlen)) x,xt,y,yt = train_test_split(vec_data,data['label'],test_size = 0.2,random_state = 123) import numpy as np x = np.array(list(x)) y = np.array(list(y)) xt = np.array(list(xt)) yt = np.array(list(yt)) x=x[:2000,:] y=y[:2000] xt=xt[:500,:] yt=yt[:500] from sklearn.svm import SVC clf = SVC(C=1, kernel = 'linear') clf.fit(x,y) from sklearn.metrics import classification_report test_pre = clf.predict(xt) report = classification_report(yt,test_pre) print(report) from keras.optimizers import SGD, RMSprop, Adagrad from keras.utils import np_utils from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.layers.embeddings import Embedding from keras.layers.recurrent import LSTM, GRU model = Sequential() model.add(Embedding(len(num_data['id'])+1,256)) model.add(Dense(32, activation='sigmoid', input_dim=100)) model.add(LSTM(128)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.summary() import matplotlib.pyplot as plt import matplotlib.image as mpimg from keras.utils import plot_model plot_model(model,to_file='Lstm2.png',show_shapes=True) ls = mpimg.imread('Lstm2.png') plt.imshow(ls) plt.axis('off') plt.show() model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=["accuracy"]) model.fit(x,y,validation_data=(x,y),epochs=15)
这段代码的作用是:
1. 读取一个csv文件(weibo_senti_100k.csv),并将其中的空值删除。
2. 对csv文件中的review列进行分词处理,并过滤掉停用词。
3. 用词频统计生成词云图。
4. 将数据集划分为训练集和测试集,分别使用SVM和LSTM模型进行分类预测,并输出分类报告。
具体流程如下:
1. 首先,使用pandas读取csv文件,并将其中的空值删除。
2. 然后,使用jieba对csv文件中的review列进行分词处理,并过滤掉停用词,得到分词后的结果。
3. 用词频统计生成词云图,可以通过WordCloud库实现。
4. 将分词后的结果转换成向量,并将数据集划分为训练集和测试集。使用SVM和LSTM模型进行分类预测,并输出分类报告。
其中,使用SVM模型的代码如下:
```
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report
# 将数据集划分为训练集和测试集
x, xt, y, yt = train_test_split(vec_data, data['label'], test_size=0.2, random_state=123)
# 训练SVM模型
clf = SVC(C=1, kernel='linear')
clf.fit(x, y)
# 使用测试集进行预测
test_pre = clf.predict(xt)
# 输出分类报告
report = classification_report(yt, test_pre)
print(report)
```
使用LSTM模型的代码如下:
```
from keras.optimizers import Adam
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM
# 将数据集划分为训练集和测试集
x, xt, y, yt = train_test_split(vec_data, data['label'], test_size=0.2, random_state=123)
# 将标签进行one-hot编码
y = np_utils.to_categorical(y, 2)
yt = np_utils.to_categorical(yt, 2)
# 构建LSTM模型
model = Sequential()
model.add(Embedding(len(num_data['id'])+1, 256))
model.add(LSTM(128))
model.add(Dense(1))
model.add(Activation('sigmoid'))
# 编译LSTM模型
model.compile(loss='binary_crossentropy', optimizer='Adam', metrics=["accuracy"])
# 训练LSTM模型
model.fit(x, y, validation_data=(xt, yt), epochs=15)
```
最后,需要注意的是,代码中有一些缺失的部分,比如数据集的读取和停用词的来源等,需要根据实际情况进行补充。
% 读取波形数据 data = load('tABC.txt'); t = data(:, 1); A = data(:, 2); B = data(:, 3); C = data(:, 4); % 计算路径1和路径2之间的时间延迟 [c1, lags1] = xcorr(A, B); [~, idx1] = max(c1); delta_t1 = lags1(idx1) / 1000000; % 单位换算为秒 v_t2 = 1000; % 传播速度为 1000 m/s t2 = delta_t1 + 0.18 / v_t2; % 计算路径1和路径3之间的时间延迟 [c2, lags2] = xcorr(A, C); [~, idx2] = max(c2); delta_t2 = lags2(idx2) / 1000000; % 单位换算为秒 v_t3 = 1000; % 传播速度为 1000 m/s t3 = delta_t2 + 0.25 / v_t3; % 定义自定义函数,用于计算目标 T 的坐标 function [xT, yT] = calculate_target_position(k1, t2, t3, v_t2, v_t3) syms xT yT; eq1 = (xT + k1*yT) == (v_t3^2 - v_t2^2) / (2*xT) - (v_t3^2 - v_t2^2) / (2*k1*yT); eq2 = (x - xT)^2 + (y - yT)^2 == v_t2^2; eq3 = (x - xT)^2 + (y - yT)^2 == v_t3^2; [xT, yT] = solve(eq1, eq2, eq3, xT, yT); end % 调用自定义函数,计算目标 T 的坐标 k1 = 0; % 因为路径1与x轴平行,斜率为0 [xT, yT] = calculate_target_position(k1, t2, t3, v_t2, v_t3); % 输出结果 fprintf('目标T的坐标为:(%f, %f)\n', double(xT), double(yT));
以下是代码的优化建议:
1. 可以避免将数据读入内存,直接使用文件对象进行操作,节省内存空间。
2. 可以将计算路径1和路径2之间的时间延迟和计算路径1和路径3之间的时间延迟的代码封装成函数,避免重复代码。
3. 可以将自定义函数中的符号变量声明提到函数外部,避免函数调用时重复声明。
4. 可以将自定义函数中的解方程的过程封装成一个独立的函数,避免重复代码。
优化后的代码如下:
```matlab
% 打开文件对象
fid = fopen('tABC.txt', 'r');
% 读取数据
t = []; A = []; B = []; C = [];
while ~feof(fid)
line = fgetl(fid);
data = str2num(line);
t = [t; data(1)];
A = [A; data(2)];
B = [B; data(3)];
C = [C; data(4)];
end
% 关闭文件对象
fclose(fid);
% 计算路径1和路径2之间的时间延迟
delta_t1 = calculate_time_delay(A, B);
% 计算路径1和路径3之间的时间延迟
delta_t2 = calculate_time_delay(A, C);
% 定义符号变量
syms x y xT yT;
% 调用函数,解方程计算目标 T 的坐标
[xT, yT] = calculate_target_position(x, y, xT, yT, delta_t1, delta_t2, 1000, 1000);
% 输出结果
fprintf('目标T的坐标为:(%f, %f)\n', double(xT), double(yT));
% 计算路径1和路径2之间的时间延迟的函数
function delta_t = calculate_time_delay(A, B)
[c, lags] = xcorr(A, B);
[~, idx] = max(c);
delta_t = lags(idx) / 1000000;
end
% 解方程计算目标 T 的坐标的函数
function [xT, yT] = calculate_target_position(x, y, xT, yT, delta_t1, delta_t2, v_t2, v_t3)
k1 = 0;
eq1 = (xT + k1*yT) == (v_t3^2 - v_t2^2) / (2*xT) - (v_t3^2 - v_t2^2) / (2*k1*yT);
eq2 = (x - xT)^2 + (y - yT)^2 == v_t2^2;
eq3 = (x - xT)^2 + (y - yT)^2 == v_t3^2;
eqs = [eq1, eq2, eq3];
vars = [xT, yT];
[xT, yT] = solve(eqs, vars);
xT = double(xT);
yT = double(yT);
end
```
阅读全文