当前位置: 首页 > 后端技术 > Python

准确率高达94%!Python机器学习识别微博或推特bots

时间:2023-03-25 22:43:08 Python

原文来自Python实战宝典:准确率94%!Python机器学习识别微博或推特机器人推特或微博机器人的存在其实更危险。他们可以制造虚假流量,传播谣言,甚至进行一些可耻的恶意操作。这里我们使用kaggle纽约大学2017年机器学习竞赛的twitter分类数据来进行我们的识别实验。本次实验的数据集请访问:下载Python推特机器人分类数据集。在开始之前,我们需要安装以下Python包(库),打开您的CMD(Windows系统)/Terminal(macOS系统)并输入以下命令:pipinstallnumpypipinstallseabornpipinstallpandaspipinstallmatplotlibpipinstallscikit-learnwherenumpy而pandas都是用来做数据处理的。numpy是用C写的库,所以运行起来会比python自带的运行快。另外,matplotlib和seaborn主要用于Python数据可视化。scikit-learn内置了很多常用的机器学习分析模型,使用起来非常简单。1.Python加载数据OK,废话不多说,现在开始使用pandas加载数据,分别获取bot和non-bot数据:importpandasaspdimportnumpyasnpimportseabornimportmatplotlibdata=pd.read_csv('training_data.csv')Bots=data[data.bot==1]NonBots=data[data.bot==0]使用热图识别训练集/测试集中缺失的数据:seaborn.heatmap(data.isnull(),yticklabels=false,cbar=False,cmap='viridis')#热图,当数据中有空值时,会用黄色标注matplotlib.pyplot.tight_layout()matplotlib.pyplot.show()2.Python特性选择什么是特征选择?其实很简单。我们在日常生活中如何辨别西瓜和榴莲呢?例如,在外观特征方面:榴莲有刺,呈黄色;西瓜又圆又绿。机器学习模型是一样的,我们需要从类似于西瓜外观的特征中选出两个类别的特征。比如我们之前的Python热图查看缺失数据的应用:Python机器人数据缺失热图Python非机器人数据缺失热图,我们可以清楚的看到机器人的位置,更多的url明显缺失。因此,这两项可以添加到我们的功能中。由于数据量不大,我们应该绕过字符串编码。以location列为例,编码方式为:location缺失则为false,location存在则为True。其他功能当然,还有名称和描述等必填信息。当然,我们也可以选择Twitterbot使用的一些脏话作为特征,如果他们的信息中包含这些脏话,就将bot的这个feature设置为True。下面是一个使用脏话的机器人的例子。您可以添加更多单词:bag_of_words_bot=r'bot|b0t|cannabis|tweetme|mishear|followme|updatesevery|gorilla|yes_ofc|forget'\r'expos|kill|bbb|truthe|fake|anonym|免费|病毒|时髦|RNA|行话'\r'nerd|swag|jack|chick|prison|paper|pokem|xx|freak|ffd|dunia|clone|genie|bbb'\r'ffd|onlyman|emoji|joke|troll|droop|free|every|wow|cheese|yeah|bio|magic|wizard|face'将我们的特征编码为数字:#此列的每个值不包含脏话,如果包含则为True,如果包含则为False不包含,na=False)data['description_binary']=data.description.str.contains(bag_of_words_bot,case=False,na=False)data['status_binary']=data.status.str.contains(bag_of_words_bot,case=False,na=False)#判断该列的每个值是否有listedcount>20000,有则为False,没有则为Truedata['listed_count_binary']=(data.listedcount>20000)==False#判断该列的每个值是否为空,如果为空则为False,否则为Truedata['location_binary']=~data.location.isnull()data['url_binary']=~data.url.isnull()#选择我们的特征features=['screen_name_binary','name_binary','description_binary','status_binary','verified','followers_count','verified','friends_count','statuses_count','listed_count_binary','bot','url_binary','location_binary','default_profile','default_profile_image']需要注意的是,所有的文本都编码为0sum的形式1(有无脏话)3.Pythonscikit-learn训练和测试下面我们使用Pythonscikit-learn包中的决策树模型进行分类。首先我们介绍一下需要用到的包,一共有三个,如下:fromsklearn.treeimportDecisionTreeClassifierfromsklearn.metricsimportaccuracy_scorefromsklearn.model_selectionimporttrain_test_split1.从sklearn.tree导入DecisionTreeClassifier,这是一个决策树分类器模型,我们一会儿会用到训练;2.sklearn.metrics引入accuracy_score,用于计算accuracy;3.sklearn.model_selection的train_test_split用来方便的分割训练集和测试集。####拆分训练集X=data[features].iloc[:,:-1]#BOTs除了最后一列都是数据y=data[features].iloc[:,-1]#BOT是一个分类object,1:robot0:non-robotX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=101)使用train_test_split()函数,test_size=0.3表示使用30%的数据为了测试,random_state=101是随机数种子。设置后,在不改变训练集的情况下,每次测试的测试结果都是一样的。训练和测试clf=DecisionTreeClassifier(criterion='entropy',min_samples_leaf=50,min_samples_split=10)clf.fit(X_train,y_train)y_pred_train=clf.predict(X_train)y_pred_test=clf.predict(X_test)print("训练精度:%.5f"%accuracy_score(y_train,y_pred_train))print("TestAccuracy:%.5f"%accuracy_score(y_test,y_pred_test))初始化一个决策树模型clf,clf.fit开始训练,clf.predict是测试.4.Python模型结果最后得到如下结果。测试准确率高达94.4%。也可以试试其他的模型,不仅可以选择决策树,比如SVM、LR都可以试试。全部源码下载请点击:Python机器学习识别微博或推特机器人(acc:94.4%)本篇到此结束,如果你想看今天我们的Python教程,请继续关注我们,如果你有帮助,请点击下面的喜欢/观看。有什么问题可以在下方留言区留言,我们会耐心解答!Python实战宝典(pythondict.com)不只是一个合集欢迎关注公众号:Python实战宝典