scikit-learn使用笔记与sign prediction简单小结
来源:互联网 发布:管家婆软件怎么用 编辑:程序博客网 时间:2024/06/05 16:16
经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包。这个帖子作为笔记。(其实都没有笔记的意义,因为他家文档做的太好了,不过还是为自己记记吧,为以后节省若干分钟)。如果有幸此文被想用scikit-learn的你看见,也还是非常希望你去它们的主页看文档。主页中最值得关注的几个部分:User Guide几乎是machine learning的索引,各种方法如何使用都有,Reference是各个类的用法索引。
S1. 导入数据
大多数数据的格式都是M个N维向量,分为训练集和测试集。所以,知道如何导入向量(矩阵)数据是最为关键的一点。这里要用到numpy来协助。假设数据格式是:
导入代码参考:
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
Linear SVM (Linear kernel)
SVM (RBF or other kernel)
Naive Bayes (Gaussian likelihood)
from sklearn.naive_bayes import GaussianNB
Decision Tree (classification not regression)
Ensemble (Random Forests, classification not regression)
S3. Model Selection (Cross-validation)
手工分training data和testing data当然可以了,但是更方便的方法是自动进行,scikit-learn也有相关的功能,这里记录下cross-validation的代码:
#f1 score: http://en.wikipedia.org/wiki/F1_score
more about cross-validation: http://scikit-learn.org/stable/modules/cross_validation.htmlNote: 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代码,只要输入文件保持本文开头所述的格式(且不包含注释信息),即可用多种不同算法测试分类效果。Download.
- scikit-learn使用笔记与sign prediction简单小结
- scikit-learn使用笔记与sign prediction简单小结
- scikit-learn使用笔记与sign prediction简单小结
- python中机器学习包scikit-learn使用笔记与sign prediction简单小结
- (转发)scikit-learn使用笔记与sign prediction简单小结
- scikit-learn K近邻法类库使用小结
- scikit-learn 朴素贝叶斯类库使用小结
- scikit-learn Adaboost类库使用小结
- scikit-learn Adaboost类库使用小结
- scikit-learn Adaboost类库使用小结
- scikit-learn决策树算法库使用小结
- scikit-learn K近邻法类库使用小结
- SCIKIT-LEARN与GBDT使用案例
- 【集成学习】scikit-learn Adaboost类库使用小结
- scikit-learn SVM支持向量机算法库使用小结
- scikit-learn 逻辑回归类库使用小结
- scikit-learn 支持向量机算法库使用小结
- scikit-learn 支持向量机算法库使用小结
- 关于java递归调用内存泄露
- ftp用户权限(其实是PHP的php.ini或APACHE的httpd.conf配置 限制目录访问)
- 基于FPGA的CRC原理实现
- mysql 时间戳 今天 昨天 7天 30天 及未来时间
- Leetcode Minimum Path Sum
- scikit-learn使用笔记与sign prediction简单小结
- awk经典
- c++静态成员与静态成员函数
- 透过生死,才会明白健康的重要
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- 资本潮涌向企业移动化 国内市场谁最受青睐?
- 内存泄漏 - DRIVER_VERIFIER_DETECTED_VIOLATION (C4): 0x62
- poj_John_3480
- ubuntu下安装apache