【人工智能项目】LSTM实现电影评论情感分类实验_堆栈lstm情感分析-程序员宅基地

技术标签: 人工智能 机器学习 深度学习  lstm  人工智能  项目篇  分类  

【人工智能项目】LSTM实现电影评论情感分类实验

本次对电影评论的情感进行分析,看是否为积极评论还是消极评论。
在这里插入图片描述

本次所用数据集

import os

data_dir = "./Dataset"
print(os.listdir(data_dir))
['test.txt', 'train.txt', 'validation.txt', 'wiki_word2vec_50.bin']

导包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import os
import time
import datetime

from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from sklearn.utils import class_weight as cw

from keras import Sequential

from keras.models import Model

from keras.layers import LSTM,Activation,Dense,Dropout,Input,Embedding,BatchNormalization,Add,concatenate,Flatten
from keras.layers import Conv1D,Conv2D,Convolution1D,MaxPool1D,SeparableConv1D,SpatialDropout1D,GlobalAvgPool1D,GlobalMaxPool1D,GlobalMaxPooling1D
from keras.layers.pooling import _GlobalPooling1D
from keras.layers import MaxPooling2D,GlobalMaxPooling2D,GlobalAveragePooling2D

from keras.optimizers import RMSprop,Adam

from keras.preprocessing.text import Tokenizer
from keras.preprocessing import sequence

from keras.utils import to_categorical

from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
from keras.callbacks import ReduceLROnPlateau

%matplotlib inline

import warnings
warnings.filterwarnings("ignore")
Using TensorFlow backend.

导入数据

train_df = pd.read_csv("./Dataset/train.txt",encoding="utf-8",header=None,sep="\t",names=["label","text"])
valid_df = pd.read_csv("./Dataset/validation.txt",encoding="utf-8",header=None,sep="\t",names=["label","text"])
test_df = pd.read_csv("./Dataset/test.txt",encoding="utf-8",header=None,sep="\t",names=["label","text"])
train_df
label text
0 1 死囚 爱 刽子手 女贼 爱 衙役 我们 爱 你们 难道 还有 别的 选择 没想到 胡军 除了...
1 1 其实 我 对 锦衣卫 爱情 很萌 因为 很 言情小说 可惜 女主角 我要 不是 这样 被 乔...
2 1 两星 半 小 明星 本色 出演 老 演员 自己 发挥 基本上 王力宏 表演 指导 上 没有 ...
3 1 神马 狗血 编剧 神马 垃圾 导演 女 猪脚 无 胸无 人 胃口 一干 男 猪脚 基情 四射...
4 1 Feb 半顆 星 我們 家 說 這是 一部 從 開始 第十二 分鐘 我 開始 打哈欠 一直 ...
... ... ...
19993 0 齐齐 像 一幅 油彩 色彩 绚烂 青春 斑斓 栗子 姐姐 女神 般的 存在 多少 女孩 幻想...
19994 0 使 我 想起 多年 前 看 精武 英雄 叙事 按部就班 打斗 倒 精彩 刺激 也 颇 能 安...
19995 0 看 之前 豆瓣 上 看到 一个 评论 说 要 找到 自己 看 这部 电影 哭泣 原因 我 想...
19996 0 假如 影片 大前提 逻辑 完全 成立 那么 影片 前后 呼应 节奏 情节 主题 简直 完美 ...
19997 0 一种 浪漫 能 让 美女 感动 两种 浪漫 却 能 让 美女 不知所措 房子 车子 足以 让...

19998 rows × 2 columns

# 重新排序
train_df = train_df.sample(frac=1).reset_index(drop=True)
train_df
label text
0 0 一直 一来 我 认为 最好 电影 之一 基本上 一段时间 翻出来 看一遍 感动 那么 多 人...
1 0 哭 很 感触 鬼 经历 真的 好像 好像 虽然 最后 回到 现实 但是 他们 精神 留下 鬼...
2 0 依旧 不用 看前 部 能 看 懂 美式 剧情 特效 制作 相当 精细 阿汤哥 迪拜 一系列 ...
3 0 好 电影 不 需要 大 成本 好 电影 只 需要 打动 你 一点 东西 很 喜欢 这样 大家...
4 1 王宝强 农民 但 这部 戏里 不是 傻根 为什么 非要 演 跟 年代 傻根 一样 你 见 过...
... ... ...
19993 0 不管 别人 怎么样 抨击 我 心里 这是 一部 好 电影 爱 恨 感觉 情到 深处 贝尔 演...
19994 0 一部 故事情节 太 完整 主题 太 直接 有点 脱离 新海 诚 以往 风格 中间 部分 感觉...
19995 1 其实 世界 上本 没有 火星 男 女人 普遍 认可 并 接受 花心 不负责任 只用 下半身 ...
19996 0 成龙 终于 一部 没有 成龙 风格 电影 尔冬升 用 很 重 力 直面 人性 贪婪 生存 面...
19997 1 一部 完全 扯淡 B 级片 唯一 让 我 提起 精神 那个 硕大 毛 爷爷 头像 好 我 准...

19998 rows × 2 columns

valid_df
label text
0 1 台湾 导演 执导 林志玲 一人 分饰两角 扮演 一对 双胞胎 姐妹 廖凡 陈坤 杨佑宁 出演...
1 1 我 一向 主张 文艺片 商业片 区别对待 需要 用 不同 标准 来 衡量 英雄 无极 我 认...
2 1 比较 失望 本 以为 冯是 国内 导演 中 最会 讲故事 一个 结果 中途 因为 吃 太饱 ...
3 1 改编 很 失败 把 莎 老公 改成 个 中年 带 儿子 大叔 给 两人 美好 结局 本书 本...
4 1 剧情 一直 没看 懂 看到 一半 时 女友 旁 笑 说 演 电影 疯子 看 电影 傻子 老实...
... ... ...
5624 0 看不懂 棒球 规则 以及 数据 理论 情况 下 仍然 交杂 激动 播报 连胜 结果 眼眶 皮...
5625 0 笑點 還挺 多 但 又 不是 無厘頭 那種 不知 所謂 戲中 四個 故事 還挺 有意思 至於...
5626 0 其实 电视剧 比 电影版 不 知道 强 多少倍 起码 王 珞丹 很 适合 杜 拉拉 这个 角...
5627 0 这是 一部 给 后 看 片子 对于 整日 大城市 里 工作 奔波 还要 担心 明儿 会 不会...
5628 0 出 电影 前 看 那个 MV 万分 期待 觉得 女生 太 帅气 可是 看 又 觉得 好像 没...

5629 rows × 2 columns

# 重新排序
valid_df = valid_df.sample(frac=1).reset_index(drop=True)
valid_df
label text
0 0 真的 很 搞笑 虽然 很多 场景 比较 暴露 比较 赤裸裸 但是 看 时候 完全 没有 觉得...
1 0 好看 不是 净 追求 大 场面 古装片 更 多 桌子 底下 暗流 涌动 那根 弦 时时 令人...
2 0 值得一看 印度 贫民窟 种种 感情 面对 生活 不同 抉择 随着 一个个 问题 慢慢 展现 ...
3 1 分钟 其实 剪辑版 剧情 节奏 这么 莫名其妙 不要 以为 结局 其他人 全灭 两个 男人 ...
4 1 片子 看得 我 直起 鸡皮疙瘩 那群 多毛 强壮 未开化 猩猩 竟然 比 人类 还要 聪明 ...
... ... ...
5624 0 经典台词 地球 上 热带雨林 目前 正以 每秒钟 相当于 两个 场 速度 消失 造成 每天 ...
5625 0 以 小说 改编 不管 十三 钗 这事 真是假 我们 南京城 三十万 同胞 确是 真真实实 牺...
5626 0 一切 淡淡的 爱 无奈 滔滔 巨浪 般 对 金鱼 公主 爱恋 之后 宫崎 爷爷 转而 描画 ...
5627 0 如果说 四 奶奶 大 奶奶 天生 敌人 那么 柴 九 就是 天生 知己 他们 之间 应该 不...
5628 1 天天 里 出现 每个 演员 当 电影 好不好 先不说 做法 让 人 反 感到 作呕 本来 想...

5629 rows × 2 columns

test_df
label text
0 1 如果 我 无聊 时 网上 乱逛 偶尔 看到 这部 电影 我 可能 会 给 它 打 四星 但是...
1 1 服装 很漂亮 场景 很大 气 演员 演得 也 不错 特技 效果 也 非常 精彩 魔幻 味 够...
2 1 冯小刚 越来越 会 摸 国人 卖 搞 人 还有 很多 傻 跟着 转 个人 认为 完全 个 喜...
3 1 该剧 还是 正 老 问题 就是 痕迹 过重 宫廷 剧是 最受 观众 欢迎 所以 人人 来 拍...
4 1 戏 不够 误会 凑 戏 不够 人妖 凑 戏 不够 卧底 凑 戏 不够 寻宝 凑 戏 不够 野...
... ... ...
364 0 像 多年 前 朋友 說 一樣 法國人 浪漫 總讓 人覺 他們 心裡 綻 滿 花 如果 每天 ...
365 0 看 这部 片子 时候 我 一直 想 这种 影片 属于 什么 类型 影片 开始 部分 普通人 ...
366 0 阿娇 从 啥子 时候 那么 漂亮 演技 也好 看来 就是 要 赤裸裸 经历 才 真的 体验 ...
367 0 没有 华丽 镜头 或者 刻意 营造 小 清新 就是 普普通通 台湾 巷子 简简单单 中学 教...
368 0 我 从来不 认为 个人 应当 集体 社会 而 赎罪 你 可以 说 没有 个人 忏悔 没有 集...

369 rows × 2 columns

# 重新排序
test_df = test_df.sample(frac=1).reset_index(drop=True)
test_df
label text
0 0 原来 这部 戏 黑暗 对 观看 者 精神 摧残 逼迫 我们 去 思考 科技 网络 技术 发展...
1 1 实在 不 明白 就是 他们 说 非常 感人 电影 任何 情节 上 硬伤 或者 我 认为 硬伤...
2 1 残 不忍 睹 看 个 开头 实在 坚持 不了 精虫 吃光 他们 大脑 东京 热 正式 后 新...
3 0 未来 房屋 架构 思想 不管 动画 还是 真人 电影 想要 表现 这种 温情 手段 并 不 ...
4 1 对 维多利亚 爱情 萌生 过渡 太硬 她 动人 处 究竟 一度 产生 这样 感觉 吸引 基努...
... ... ...
364 0 当人 落魄 时候 检验 一个 人 真正 时刻 兄弟 情义 男人 与 男人 之间 对决 能屈能...
365 1 刘导 拍 这个 您 就是 晚节不保 就算 看看 后面 那些 乱七八糟 差一 杠子 人 我 恶...
366 1 祢 丫 昰 就算 讓 我 淚 撒 奧斯卡 祢 也 昰 部爛片 前半部 男人 拯救 苦海 小三...
367 0 很 经典 恐怖片 结局 很 出乎意料 我 看 好几遍 发现 不少 感人 地方 也 去 思考 ...
368 0 我 唯一 愿意 给 满分 片子 诺兰 片子 虽然 很 主观 但是 我 喜欢 他 叙事 喜欢 ...

369 rows × 2 columns

print(train_df.shape,valid_df.shape,test_df.shape)
(19998, 2) (5629, 2) (369, 2)
valid_df = pd.concat([valid_df,test_df[:50]],axis=0)
# 合并
train_df = pd.concat([train_df,valid_df],axis=0)
print(train_df.shape)
(25677, 2)
# 统计一下
sns.countplot(train_df["label"])
plt.title("Number of ham and spam messages")
plt.xlabel("Label")
Text(0.5, 0, 'Label')

在这里插入图片描述

标签数据处理

# 对标签进行处理
#  LabelEncoder 是对不连续的数字或者文本进行编号
# LabelEncoder可以将标签分配一个0—n_classes-1之间的编码

x_train = train_df["text"]
y_train = train_df["label"]


le = LabelEncoder()
y_train = le.fit_transform(y_train)
y_train = y_train.reshape(-1,1)

文本数据处理

# 分词器Tokenizer   Tokenizer是一个用于向量化文本,或将文本转换为序列(即单词在字典中的下标构成的列表,从1算起)的类
       # 类方法
           # fit_on_texts(texts) :texts用于训练的文本列表
          # texts_to_sequences(texts):texts待转为序列的文本列表 返回值:序列的列表,列表中的每个序列对应于一段输入文本

# 填充序列pad_sequences  将长为nb_smaples的序列转换为(nb_samples,nb_timesteps)2Dnumpy attay.如果提供maxlen,nb_timesteps=maxlen,
#否则其值为最长序列的长度。
# 其它短于该长度的序列都会在后部填充0以达到该长度。长与nb_timesteps的序列会被阶段,以使其匹配该目标长度。

#max_words = 1000
#max_len = 150
max_words = len(set(" ".join(x_train).split()))
max_len = x_train.apply(lambda x:len(x)).max()


tok = Tokenizer(num_words=max_words)

tok.fit_on_texts(x_train)

sequences = tok.texts_to_sequences(x_train)
sequences_matrix = sequence.pad_sequences(sequences,maxlen=max_len)
  • ModelCheckpoint:

    • 作用:该回调函数将在每个epoch后保存模型到filepath
    • 参数:
      • filename:字符串,保存模型的路径,filepath可以是格式化的字符串,里面的
      • monitor:需要监视的值,通常为:val_acc或val_loss或acc或loss
      • verbose:信息展示模型,0或1。默认为0表示不输出该信息,为1表示输出epoch模型保存信息。
      • save_best_only:当设置为Trur时,将只保存在验证集上性能最好的模型
      • mode:“auto”,“min”,"max"之一,在save_best_only=True时决定性能最佳模型的评判准则。
      • save_weights_only:若设置为True时,则只保存模型权重,否则将保存整个模型(包括模型结构,配置信息等)
      • period:CheckPoint之间的间隔的epoch数
  • EarlyStopping:

    • 作用:当监测值不再改善时,该回调函数将中止训练
    • 参数:
      • monitor:需要监视的量,通常为val_acc或val_loss或acc或loss
      • patience:当early stop被激活(如发现loss相比上patience个epoch训练没有下降),则经过patience个epoch后停止训练。
      • verbose:信息展示模型
      • mode:“auto”,“min”,"max"之一,在min模式下,如果检测值停止下降则中止训练。在max模式下,当检测值不再上升则停止训练。
  • ReduceLROnPlateau:

    • 作用:当评价指标不再提升时,减少学习率。当学习停滞时,减少2倍或10倍的学习率通常能够获得较好的效果。该回调函数检测指标的情况,如果在patience个epoch中看不到模型性能提升,则减少学习率。
    • 参数:
      • monitor:被监测的量
      • factor:每次减少学习率的因子,学习率将以lr=lr*factor的形式被技术那好
      • patience:当patience个epoch过去而模型性能不提升时,学习率减少的动作会被触发
      • mode:“auto”,“min”,"max"之一,在min模式下,如果检测值触发学习率减少。在max模式下,当检测值不再上升则触发学习率减少
      • epsilon:阈值,用来确定是否进入检测值的“平原区”
      • cooldown:学习率减少后,会经过cooldown个epoch才重新进行正常操作
      • min_lr:学习率的下限。
print("Setting Callbacks")

checkpoint = ModelCheckpoint("model.h5",
                                                     monitor="val_acc",
                                                     verbose=1,
                                                     save_best_only=True,
                                                     mode="max")

early_stopping = EarlyStopping(monitor="val_loss",
                                                     patience=3,
                                                     verbose=1,
                                                     restore_best_weights=True,
                                                     mode="min")

reduce_lr = ReduceLROnPlateau(monitor="val_loss",
                                                      factor=0.5,
                                                      patience=2,
                                                      verbose=1,
                                                      mode="min")

callbacks=[checkpoint,early_stopping,reduce_lr]
Setting Callbacks

定义深度学习模型

# 定义RNN模型
def RNN():
    model = Sequential()
    
    model.add(Embedding(max_words,128,input_length=max_len))
    model.add(LSTM(64))
    
    model.add(Dropout(0.5))
    model.add(BatchNormalization())
    
    model.add(Dense(256,activation="relu"))
    model.add(Dropout(0.5))
    model.add(BatchNormalization())
    
    model.add(Dense(64,activation="relu"))

    model.add(Dropout(0.5))
    
    model.add(Dense(1,activation="sigmoid"))
    
    model.summary()
    
    return model
# 画曲线
def plot_performance(history=None,figure_directory=None,ylim_pad=[0,0]):
    xlabel="Epoch"
    legends=["Training","Validation"]
    
    plt.figure(figsize=(20,5))
    
    y1=history.history["accuracy"]
    y2=history.history["val_accuracy"]
    
    min_y=min(min(y1),min(y2))-ylim_pad[0]
    max_y=max(max(y1),max(y2))+ylim_pad[0]
    
    plt.subplot(121)
    
    plt.plot(y1)
    plt.plot(y2)
    
    plt.title("Model Accuracy\n",fontsize=17)
    plt.xlabel(xlabel,fontsize=15)
    plt.ylabel("Accuracy",fontsize=15)
    plt.ylim(min_y,max_y)
    plt.legend(legends,loc="upper left")
    plt.grid()
    
    y1=history.history["loss"]
    y2=history.history["val_loss"]
    
    min_y=min(min(y1),min(y2))-ylim_pad[1]
    max_y=max(max(y1),max(y2))+ylim_pad[1]
    
    plt.subplot(122)
    
    plt.plot(y1)
    plt.plot(y2)
    
    plt.title("Model Loss:\n",fontsize=17)
    plt.xlabel(xlabel,fontsize=15)
    plt.ylabel("Loss",fontsize=15)
    plt.ylim(min_y,max_y)
    plt.legend(legends,loc="upper left")
    plt.grid()
    plt.show()

RNN

rnn_model = RNN()
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 1954, 128)         7551616   
_________________________________________________________________
lstm_1 (LSTM)                (None, 64)                49408     
_________________________________________________________________
dropout_1 (Dropout)          (None, 64)                0         
_________________________________________________________________
batch_normalization_1 (Batch (None, 64)                256       
_________________________________________________________________
dense_1 (Dense)              (None, 256)               16640     
_________________________________________________________________
dropout_2 (Dropout)          (None, 256)               0         
_________________________________________________________________
batch_normalization_2 (Batch (None, 256)               1024      
_________________________________________________________________
dense_2 (Dense)              (None, 64)                16448     
_________________________________________________________________
dropout_3 (Dropout)          (None, 64)                0         
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 65        
=================================================================
Total params: 7,635,457
Trainable params: 7,634,817
Non-trainable params: 640
_________________________________________________________________
loss = "binary_crossentropy"
metrics=["accuracy"]
# RNN模型训练
print("Starting...\n")
learning_rate=0.001
optimizer=Adam(learning_rate)

print("\n\nCompliling Model...\n")
rnn_model.compile(optimizer=optimizer,
                                 loss=loss,
                                 metrics=metrics)

verbose = 1
epochs=100
batch_size=128
validation_split=0.1
print("Trainning Model...\n")

rnn_history=rnn_model.fit(sequences_matrix,
                                            y_train,
                                            batch_size=batch_size,
                                            epochs=epochs,
                                            verbose=1,
                                            callbacks=callbacks,
                                            validation_split=validation_split)

Starting...



Compliling Model...

WARNING:tensorflow:From D:\software\Anaconda\anaconda\envs\tensorflow\lib\site-packages\tensorflow\python\ops\nn_impl.py:180: add_dispatch_support.<locals>.wrapper (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.
Instructions for updating:
Use tf.where in 2.0, which has the same broadcast rule as np.where
Trainning Model...

WARNING:tensorflow:From D:\software\Anaconda\anaconda\envs\tensorflow\lib\site-packages\keras\backend\tensorflow_backend.py:422: The name tf.global_variables is deprecated. Please use tf.compat.v1.global_variables instead.

Train on 23109 samples, validate on 2568 samples
Epoch 1/100
23109/23109 [==============================] - 320s 14ms/step - loss: 0.6358 - accuracy: 0.6747 - val_loss: 0.6019 - val_accuracy: 0.8236
Epoch 2/100
23109/23109 [==============================] - 317s 14ms/step - loss: 0.2775 - accuracy: 0.8940 - val_loss: 0.4068 - val_accuracy: 0.8162
Epoch 3/100
23109/23109 [==============================] - 319s 14ms/step - loss: 0.1187 - accuracy: 0.9601 - val_loss: 0.4475 - val_accuracy: 0.8185
Epoch 4/100
23109/23109 [==============================] - 325s 14ms/step - loss: 0.0608 - accuracy: 0.9803 - val_loss: 0.9544 - val_accuracy: 0.7819

Epoch 00004: ReduceLROnPlateau reducing learning rate to 0.0005000000237487257.
Epoch 5/100
23109/23109 [==============================] - 325s 14ms/step - loss: 0.0285 - accuracy: 0.9904 - val_loss: 0.7304 - val_accuracy: 0.8209
Restoring model weights from the end of the best epoch
Epoch 00005: early stopping
# 可视化
plot_performance(history=rnn_history)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jeZVpTeF-1635930217671)(output_31_0.png)]

验证结果

# 数据导入
data = pd.read_csv("./Dataset/test.txt",encoding="utf-8",header=None,sep="\t",names=["label","text"])
data.head()
label text
0 1 如果 我 无聊 时 网上 乱逛 偶尔 看到 这部 电影 我 可能 会 给 它 打 四星 但是...
1 1 服装 很漂亮 场景 很大 气 演员 演得 也 不错 特技 效果 也 非常 精彩 魔幻 味 够...
2 1 冯小刚 越来越 会 摸 国人 卖 搞 人 还有 很多 傻 跟着 转 个人 认为 完全 个 喜...
3 1 该剧 还是 正 老 问题 就是 痕迹 过重 宫廷 剧是 最受 观众 欢迎 所以 人人 来 拍...
4 1 戏 不够 误会 凑 戏 不够 人妖 凑 戏 不够 卧底 凑 戏 不够 寻宝 凑 戏 不够 野...
y_test = data["label"]
y_test = np.array(y_test)
predict_data = data["text"]
# 将带预测数据转为序列
predict_sequences = tok.texts_to_sequences(predict_data)
predict_sequences_matrix = sequence.pad_sequences(predict_sequences,maxlen=max_len)

# RNN预测
rnn_predict_num = rnn_model.predict_classes(predict_sequences_matrix )
predict = rnn_predict_num[:,0]
predict
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1,
       1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
       1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
       0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0,
       0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
       0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0,
       1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
       0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
       0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0,
       0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0,
       0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1])
y_test
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64)
from sklearn.metrics import accuracy_score

print(accuracy_score(predict,y_test))
0.8373983739837398

小结

点赞收藏评论走起来,亲爱的瓷们!!!!
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Mind_programmonkey/article/details/121125587

智能推荐

oracle 12c 集群安装后的检查_12c查看crs状态-程序员宅基地

文章浏览阅读1.6k次。安装配置gi、安装数据库软件、dbca建库见下:http://blog.csdn.net/kadwf123/article/details/784299611、检查集群节点及状态:[root@rac2 ~]# olsnodes -srac1 Activerac2 Activerac3 Activerac4 Active[root@rac2 ~]_12c查看crs状态

解决jupyter notebook无法找到虚拟环境的问题_jupyter没有pytorch环境-程序员宅基地

文章浏览阅读1.3w次,点赞45次,收藏99次。我个人用的是anaconda3的一个python集成环境,自带jupyter notebook,但在我打开jupyter notebook界面后,却找不到对应的虚拟环境,原来是jupyter notebook只是通用于下载anaconda时自带的环境,其他环境要想使用必须手动下载一些库:1.首先进入到自己创建的虚拟环境(pytorch是虚拟环境的名字)activate pytorch2.在该环境下下载这个库conda install ipykernelconda install nb__jupyter没有pytorch环境

国内安装scoop的保姆教程_scoop-cn-程序员宅基地

文章浏览阅读5.2k次,点赞19次,收藏28次。选择scoop纯属意外,也是无奈,因为电脑用户被锁了管理员权限,所有exe安装程序都无法安装,只可以用绿色软件,最后被我发现scoop,省去了到处下载XXX绿色版的烦恼,当然scoop里需要管理员权限的软件也跟我无缘了(譬如everything)。推荐添加dorado这个bucket镜像,里面很多中文软件,但是部分国外的软件下载地址在github,可能无法下载。以上两个是官方bucket的国内镜像,所有软件建议优先从这里下载。上面可以看到很多bucket以及软件数。如果官网登陆不了可以试一下以下方式。_scoop-cn

Element ui colorpicker在Vue中的使用_vue el-color-picker-程序员宅基地

文章浏览阅读4.5k次,点赞2次,收藏3次。首先要有一个color-picker组件 <el-color-picker v-model="headcolor"></el-color-picker>在data里面data() { return {headcolor: ’ #278add ’ //这里可以选择一个默认的颜色} }然后在你想要改变颜色的地方用v-bind绑定就好了,例如:这里的:sty..._vue el-color-picker

迅为iTOP-4412精英版之烧写内核移植后的镜像_exynos 4412 刷机-程序员宅基地

文章浏览阅读640次。基于芯片日益增长的问题,所以内核开发者们引入了新的方法,就是在内核中只保留函数,而数据则不包含,由用户(应用程序员)自己把数据按照规定的格式编写,并放在约定的地方,为了不占用过多的内存,还要求数据以根精简的方式编写。boot启动时,传参给内核,告诉内核设备树文件和kernel的位置,内核启动时根据地址去找到设备树文件,再利用专用的编译器去反编译dtb文件,将dtb还原成数据结构,以供驱动的函数去调用。firmware是三星的一个固件的设备信息,因为找不到固件,所以内核启动不成功。_exynos 4412 刷机

Linux系统配置jdk_linux配置jdk-程序员宅基地

文章浏览阅读2w次,点赞24次,收藏42次。Linux系统配置jdkLinux学习教程,Linux入门教程(超详细)_linux配置jdk

随便推点

matlab(4):特殊符号的输入_matlab微米怎么输入-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏19次。xlabel('\delta');ylabel('AUC');具体符号的对照表参照下图:_matlab微米怎么输入

C语言程序设计-文件(打开与关闭、顺序、二进制读写)-程序员宅基地

文章浏览阅读119次。顺序读写指的是按照文件中数据的顺序进行读取或写入。对于文本文件,可以使用fgets、fputs、fscanf、fprintf等函数进行顺序读写。在C语言中,对文件的操作通常涉及文件的打开、读写以及关闭。文件的打开使用fopen函数,而关闭则使用fclose函数。在C语言中,可以使用fread和fwrite函数进行二进制读写。‍ Biaoge 于2024-03-09 23:51发布 阅读量:7 ️文章类型:【 C语言程序设计 】在C语言中,用于打开文件的函数是____,用于关闭文件的函数是____。

Touchdesigner自学笔记之三_touchdesigner怎么让一个模型跟着鼠标移动-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏13次。跟随鼠标移动的粒子以grid(SOP)为partical(SOP)的资源模板,调整后连接【Geo组合+point spirit(MAT)】,在连接【feedback组合】适当调整。影响粒子动态的节点【metaball(SOP)+force(SOP)】添加mouse in(CHOP)鼠标位置到metaball的坐标,实现鼠标影响。..._touchdesigner怎么让一个模型跟着鼠标移动

【附源码】基于java的校园停车场管理系统的设计与实现61m0e9计算机毕设SSM_基于java技术的停车场管理系统实现与设计-程序员宅基地

文章浏览阅读178次。项目运行环境配置:Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。项目技术:Springboot + mybatis + Maven +mysql5.7或8.0+html+css+js等等组成,B/S模式 + Maven管理等等。环境需要1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。_基于java技术的停车场管理系统实现与设计

Android系统播放器MediaPlayer源码分析_android多媒体播放源码分析 时序图-程序员宅基地

文章浏览阅读3.5k次。前言对于MediaPlayer播放器的源码分析内容相对来说比较多,会从Java-&amp;amp;gt;Jni-&amp;amp;gt;C/C++慢慢分析,后面会慢慢更新。另外,博客只作为自己学习记录的一种方式,对于其他的不过多的评论。MediaPlayerDemopublic class MainActivity extends AppCompatActivity implements SurfaceHolder.Cal..._android多媒体播放源码分析 时序图

java 数据结构与算法 ——快速排序法-程序员宅基地

文章浏览阅读2.4k次,点赞41次,收藏13次。java 数据结构与算法 ——快速排序法_快速排序法