服务器之家:专注于服务器技术及软件下载分享
分类导航

Linux|Centos|Ubuntu|系统进程|Fedora|注册表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服务器之家 - 服务器系统 - Linux - scikit-learn使用笔记与sign prediction简单小结

scikit-learn使用笔记与sign prediction简单小结

2019-10-24 19:24服务器之家 Linux

经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包。这个帖子作为笔记

经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包。这个帖子作为笔记。(其实都没有笔记的意义,因为他家文档做的太好了,不过还是为自己记记吧,为以后节省若干分钟)。如果有幸此文被想用scikit-learn的你看见,也还是非常希望你去它们的主页看文档。主页中最值得关注的几个部分:User Guide几乎是machine learning的索引,各种方法如何使用都有,Reference是各个类的用法索引。

S1. 导入数据 
大多数数据的格式都是M个N维向量,分为训练集和测试集。所以,知道如何导入向量(矩阵)数据是最为关键的一点。这里要用到numpy来协助。假设数据格式是:

 

复制代码

代码如下:


Stock prices indicator1 indicator2 
2.0 123 1252 
1.0 .. .. 
.. . . 

 

导入代码参考:

 

复制代码

代码如下:


import numpy as np 
f = open("filename.txt") 
f.readline() # skip the header 
data = np.loadtxt(f) 
X = data[:, 1:] # select columns 1 through end 
y = data[:, 0] # select column 0, the stock price 

 

libsvm格式的数据导入:

 

复制代码

代码如下:


>>> from sklearn.datasets import load_svmlight_file 
>>> X_train, y_train = load_svmlight_file("/path/to/train_dataset.txt") 
... 
>>>X_train.todense()#将稀疏矩阵转化为完整特征矩阵 

 

更多格式数据导入与生成参考:http://scikit-learn.org/stable/datasets/index.html


S2. Supervised Classification 几种常用方法:

Logistic Regression

 

复制代码

代码如下:


>>> from sklearn.linear_model import LogisticRegression 
>>> clf2 = LogisticRegression().fit(X, y) 
>>> clf2 
LogisticRegression(C=1.0, intercept_scaling=1, dual=False, fit_intercept=True, 
penalty='l2', tol=0.0001) 
>>> clf2.predict_proba(X_new) 
array([[ 9.07512928e-01, 9.24770379e-02, 1.00343962e-05]]) 

 

Linear SVM (Linear kernel)

 

复制代码

代码如下:


>>> from sklearn.svm import LinearSVC 
>>> clf = LinearSVC() 

>>> clf.fit(X, Y) 
>>> X_new = [[ 5.0, 3.6, 1.3, 0.25]] 
>>> clf.predict(X_new)#reuslt[0] if class label 
array([0], dtype=int32) 

 

SVM (RBF or other kernel)

 

复制代码

代码如下:


>>> from sklearn import svm 
>>> clf = svm.SVC() 
>>> clf.fit(X, Y) 
SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, 
gamma=0.0, kernel='rbf', probability=False, shrinking=True, tol=0.001, 
verbose=False) 
>>> clf.predict([[2., 2.]]) 
array([ 1.]) 

 

Naive Bayes (Gaussian likelihood)

 

复制代码

代码如下:


from sklearn.naive_bayes import GaussianNB 
>>> from sklearn import datasets 
>>> gnb = GaussianNB() 
>>> gnb = gnb.fit(x, y) 
>>> gnb.predict(xx)#result[0] is the most likely class label 

 

Decision Tree (classification not regression)

 

复制代码

代码如下:


>>> from sklearn import tree 
>>> clf = tree.DecisionTreeClassifier() 
>>> clf = clf.fit(X, Y) 
>>> clf.predict([[2., 2.]]) 
array([ 1.]) 

 

Ensemble (Random Forests, classification not regression)

 

复制代码

代码如下:


>>> from sklearn.ensemble import RandomForestClassifier 
>>> clf = RandomForestClassifier(n_estimators=10) 
>>> clf = clf.fit(X, Y) 
>>> clf.predict(X_test) 

 

S3. Model Selection (Cross-validation) 
手工分training data和testing data当然可以了,但是更方便的方法是自动进行,scikit-learn也有相关的功能,这里记录下cross-validation的代码:

 

复制代码

代码如下:


>>> from sklearn import cross_validation 
>>> from sklearn import svm 
>>> clf = svm.SVC(kernel='linear', C=1) 
>>> scores = cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5)#5-fold cv 
#change metrics 
>>> from sklearn import metrics 
>>> cross_validation.cross_val_score(clf, iris.data, iris.target, cv=5, score_func=metrics.f1_score) 
#f1 score: <a href="http://en.wikipedia.org/wiki/F1_score">http://en.wikipedia.org/wiki/F1_score</a> 

 

more about cross-validation: http://scikit-learn.org/stable/modules/cross_validation.html

Note: if using LR, clf = LogisticRegression().

S4. Sign Prediction Experiment 
数据集,EPINIONS,有user与user之间的trust与distrust关系,以及interaction(对用户评论的有用程度打分)。

Features:网络拓扑feature参考"Predict positive and negative links in online social network",用户交互信息feature。

一共设了3类instances,每类3次训练+测试,训练数据是测试数据的10倍,~80,000个29/5/34维向量,得出下面一些结论。时间上,GNB最快(所有instance都是2~3秒跑完),DT非常快(有一类instance只用了1秒,其他都要4秒),LR很快(三类instance的时间分别是2秒,5秒,~30秒),RF也不慢(一个instance9秒,其他26秒),linear kernel的SVM要比LR慢好几倍(所有instance要跑30多秒),RBF kernel的SVM比linear SVM要慢20+倍到上百倍(第一个instance要11分钟,第二个instance跑了近两个小时)。准确度上RF>LR>DT>GNB>SVM(RBF kernel)>SVM(Linear kernel)。GNB和SVM(linear kernel)、SVM(rbf kernel)在第二类instance上差的比较远(10~20个百分点),LR、DT都差不多,RF确实体现了ENSEMBLE方法的强大,比LR有较为显著的提升(近2~4个百分点)。(注:由于到该文提交为止,RBF版的SVM才跑完一次测试中的两个instance,上面结果仅基于此。另外,我还尝试了SGD等方法,总体上都不是特别理想,就不记了)。在feature的有效性上面,用户交互feature比网络拓扑feature更加有效百分五到百分十。

S5.通用测试源代码 

这里是我写的用包括上述算法在内的多种算法的自动分类并10fold cross-validation的python代码,只要输入文件保持本文开头所述的格式(且不包含注释信息),即可用多种不同算法测试分类效果。

延伸 · 阅读

精彩推荐
  • LinuxLinux lnmp下无法使用mail发邮件的两种解决方法

    Linux lnmp下无法使用mail发邮件的两种解决方法

    在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix。下面为大家一一介绍下 ...

    Linux之家4042019-09-17
  • Linuxlinux中rmdir命令使用详解(删除空目录)

    linux中rmdir命令使用详解(删除空目录)

    今天学习一下linux中命令: rmdir命令。rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的 ...

    linux命令大全5372019-11-19
  • LinuxLinux常用的日志文件和常用命令

    Linux常用的日志文件和常用命令

    成功地管理任何系统的关键之一,是要知道系统中正在发生什么事。 Linux 中提供了异常日志,并且日志的细节是可配置的。Linux 日志都以明文形式存储,所...

    Linux教程网2632020-04-18
  • Linux确保Linux系统安全的前提条件 漏洞防护

    确保Linux系统安全的前提条件 漏洞防护

    Linux 作为开放式的操作系统受到很多程序员的喜爱,很多高级程序员都喜欢编写Linux操作系统的相关软件。这使得Linux操作系统有着丰富的软件支持,还有无...

    Linux之家2642020-04-11
  • Linux详解Linux系统下PXE服务器的部署过程

    详解Linux系统下PXE服务器的部署过程

    这篇文章主要介绍了Linux系统下PXE服务器的部署过程,包括对PXE的API架构作了一个基本的简介,需要的朋友可以参考下...

    运维之道9812019-07-04
  • LinuxLinux上设置用户通过SFTP访问目录的权限的方法

    Linux上设置用户通过SFTP访问目录的权限的方法

    这篇文章主要介绍了Linux上设置用户通过SFTP访问目录的权限的方法,SFTP可以理解为使用SSH协议进行FTP传输的协议,因而同时要对OpenSSH进行相关设置,需要的朋...

    OSChina10022019-06-19
  • LinuxLinux中环境变量配置的步骤详解

    Linux中环境变量配置的步骤详解

    Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的...

    Myths7882022-02-10
  • Linux手把手教您在 Linux 上使用 GPG 加解密文件

    手把手教您在 Linux 上使用 GPG 加解密文件

    在本教程中,我将告诉你如何用 GPG 加密和解密文件。这是一个简单的教程,你可以在你的 Linux 系统上尝试所有的练习。这将帮助你练习 GPG 命令,并在你...

    Linux中国6962021-12-15