if __name__ == '__main__': # 数据预处理 d_train, d_test, d_label = data_preprocess() # 计算设备:GPU cuda device = torch.device('cpu') # 超参数 input_size = 1 hidden_size = 20 num_layers = 2 num_classes = 5 batch_size = 10 num_epochs = 130 learning_rate = 0.01 hyper_parameters = (input_size, hidden_size, num_layers, num_classes, num_epochs, learning_rate) # 创建数据加载器,获得按batch大小读入数据的加载器 train_data = MyDataset(d_train, d_label) train_loader = DataLoader(dataset=train_data, batch_size=batch_size, shuffle=True) test_data = MyDataset(d_test, d_label) test_loader = DataLoader(dataset=test_data, batch_size=batch_size, shuffle=False) list_rate = train(device, train_loader, test_loader, *hyper_parameters) fig = plt.figure() ax = fig.add_subplot(111) ax.plot(np.arange(num_epochs)+1, list_rate) plt.xlabel("num_epochs") plt.ylabel("probability") ax.grid() plt.show()
时间: 2024-04-28 14:22:02 浏览: 89
这段代码是用 PyTorch 实现的一个简单的神经网络模型,用于分类任务。主要包括以下几个部分:
1. 数据预处理:包括读取数据集、数据清洗、特征工程等。
2. 定义超参数:包括输入大小、隐藏层大小、隐藏层数量、输出类别数量、批次大小、迭代次数、学习率等。
3. 创建数据加载器:使用 PyTorch 的 DataLoader 类,将训练数据和测试数据划分成批次,方便进行训练和测试。
4. 模型训练:使用定义好的超参数和数据加载器,通过反向传播算法进行模型训练,并将每轮训练的准确率保存到一个列表中。
5. 可视化结果:使用 Matplotlib 库将训练过程中每轮的准确率可视化展示出来。
相关问题
if __name__ == '__main__': # 通过pandas读入数据 data = pd.read_excel('../1data.xls', encoding='utf-8', header=None) data.columns = ['class_label', 'text', 'tokens'] label = data['class_label'] categories = [] for i in label: if i in categories: pass else: categories.append(i) print(categories) le = preprocessing.LabelEncoder().fit_transform(data['class_label']) data["class_label"] = le # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(data["tokens"], data["class_label"], test_size=0.2, random_state=1) # 文本特征提取 X_train_tfidf, tfidf_vectorizer = tfidf(X_train) X_test_tfidf = tfidf_vectorizer.transform(X_test) modelFile = "SVMModel.m" # 训练保存模型 SVMClassify() # 预测测试集结果 SVMTest()
这部分代码是在主函数中进行数据预处理、模型训练和测试的过程。首先,你使用pandas库读取了一个Excel文件,并将数据命名为data。然后,你为数据的列名进行了命名,分别是'class_label'、'text'和'tokens'。
接下来,你提取了标签(label)并将其存储在categories列表中。这个循环遍历了标签(label)列表,如果标签(label)已经在categories列表中,则跳过,否则将其添加到categories列表中。
之后,你使用LabelEncoder对data['class_label']进行了编码,并将编码后的结果存储在le变量中。然后,将data["class_label"]更新为编码后的结果。
接着,你使用train_test_split函数将数据集划分为训练集(X_train, y_train)和测试集(X_test, y_test),其中测试集占总数据集的20%。
然后,你使用tfidf函数对训练集进行了文本特征提取,得到了训练集的tfidf表示(X_train_tfidf)和tfidf向量化器(tfidf_vectorizer)。
接下来,你指定了模型文件的路径(modelFile)。
然后,你调用了SVMClassify函数进行模型训练,并保存了训练好的模型。
最后,你调用了SVMTest函数对测试集进行预测,并输出了一些评估指标。
朴素贝叶斯做文本分类代码_百万级新闻文本分类实践(朴素贝叶斯,SVM)
以下是朴素贝叶斯做文本分类的代码:
```python
import os
import random
import jieba
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
def load_data():
"""
加载数据集
"""
data = []
labels = []
root = './data'
for label in os.listdir(root):
for file in os.listdir(os.path.join(root, label)):
with open(os.path.join(root, label, file), 'r', encoding='utf-8') as f:
content = f.read()
data.append(content)
labels.append(label)
return data, labels
def preprocess_data(data):
"""
数据预处理:分词
"""
preprocessed_data = []
for doc in data:
words = jieba.cut(doc)
preprocessed_data.append(' '.join(words))
return preprocessed_data
def split_data(data, labels, test_ratio=0.2):
"""
拆分数据集:训练集和测试集
"""
data_labels = list(zip(data, labels))
random.shuffle(data_labels)
data, labels = zip(*data_labels)
split_index = int(len(data) * (1 - test_ratio))
train_data = data[:split_index]
train_labels = labels[:split_index]
test_data = data[split_index:]
test_labels = labels[split_index:]
return train_data, train_labels, test_data, test_labels
def train_model(train_data, train_labels):
"""
训练模型:朴素贝叶斯
"""
vectorizer = TfidfVectorizer()
train_data = vectorizer.fit_transform(train_data)
model = MultinomialNB()
model.fit(train_data, train_labels)
return model, vectorizer
def evaluate_model(model, vectorizer, test_data, test_labels):
"""
评估模型性能
"""
test_data = vectorizer.transform(test_data)
accuracy = model.score(test_data, test_labels)
print('Accuracy:', accuracy)
if __name__ == '__main__':
# 加载数据集
data, labels = load_data()
# 数据预处理
preprocessed_data = preprocess_data(data)
# 拆分数据集
train_data, train_labels, test_data, test_labels = split_data(preprocessed_data, labels)
# 训练模型
model, vectorizer = train_model(train_data, train_labels)
# 评估模型性能
evaluate_model(model, vectorizer, test_data, test_labels)
```
以上代码使用朴素贝叶斯模型对新闻文本进行分类。首先,通过 `load_data` 函数加载数据集,然后通过 `preprocess_data` 函数对数据集进行预处理,即对每个文档进行分词。接着,通过 `split_data` 函数将数据集拆分为训练集和测试集。然后,通过 `train_model` 函数训练朴素贝叶斯模型。最后,通过 `evaluate_model` 函数评估模型的性能。
阅读全文