[转]0.python:scikit-learn基本用法
经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: http://en.wikipedia.org/wiki/F1_score |
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代码,只要输入文件保持本文开头所述的格式(且不包含注释信息),即可用多种不同算法测试分类效果。
[转]0.python:scikit-learn基本用法的更多相关文章
- Scikit Learn: 在python中机器学习
转自:http://my.oschina.net/u/175377/blog/84420#OSC_h2_23 Scikit Learn: 在python中机器学习 Warning 警告:有些没能理解的 ...
- scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类 (python代码)
scikit learn 模块 调参 pipeline+girdsearch 数据举例:文档分类数据集 fetch_20newsgroups #-*- coding: UTF-8 -*- import ...
- 笨办法学 Python (Learn Python The Hard Way)
最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注 ...
- python 中del 的用法
python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...
- (原创)(三)机器学习笔记之Scikit Learn的线性回归模型初探
一.Scikit Learn中使用estimator三部曲 1. 构造estimator 2. 训练模型:fit 3. 利用模型进行预测:predict 二.模型评价 模型训练好后,度量模型拟合效果的 ...
- (原创)(四)机器学习笔记之Scikit Learn的Logistic回归初探
目录 5.3 使用LogisticRegressionCV进行正则化的 Logistic Regression 参数调优 一.Scikit Learn中有关logistics回归函数的介绍 1. 交叉 ...
- 【python】 del 的用法
转自 https://blog.csdn.net/love1code/article/details/47276683 python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以 ...
- Python Numpy shape 基础用法(转自他人的博客,如涉及到侵权,请联系我)
Python Numpy shape 基础用法 shape函数是numpy.core.fromnumeric中的函数,它的功能是读取矩阵的长度,比如shape[0]就是读取矩阵第一维度的长度.它的输入 ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- [转]使用python来操作redis用法详解
转自:使用python来操作redis用法详解 class CommRedisBase(): def __init__(self): REDIS_CONF = {} connection_pool = ...
随机推荐
- ==与equals与hashCode的区别联系。
前言:对于引用类型的变量,它涉及到两块内存,一块是堆中的内存,用于存放new出来的对象(就是对象的具体内容):另一块是栈内存,用来存放变量在堆内存中的地址. 1,“==” 判断两个变量是否是同一个变量 ...
- 如何使用windows云服务器搭建IIs、windows服务
如何使用windows云服务器搭建IIs.windows服务,以下针对腾讯云服务器进行说明 1.购买云服务器之后,第1步需要设置的是,找到重装系统.重置密码等处. 2.设置安全组,设置完安全组之后才能 ...
- 使用GSON和泛型解析约定格式的JSON串(转)
时间紧张,先记一笔,后续优化与完善. 解决的问题: 使用GSON和泛型解析约定格式的JSON串. 背景介绍: 1.使用GSON来进行JSON串与java代码的互相转换. 2.JSON的格式如下三种: ...
- Android的学习之路(三)项目的启动过程和安装过程具体解释
应用的安装和启动过程: 安装:第一步:java的编译器会把这个.java文件编译成.class文件 第二部:Android的SDK提供了一个dx工具,这个工具把.class文件转义 ...
- 使用Axure RP原型设计实践04,了解全局变量
变量是一个可以变的数,可以看作是一个数据的容器.变量有2个操作,一个是读,一个是写.Axure的全局变量是指任何时候都可以对这个变量进行读写操作. 点击工具栏Project下的Global Varia ...
- java根据模板导出PDF详细教程
原文:https://blog.csdn.net/pengyufight/article/details/75305128 题记:由于业务的需要,需要根据模板定制pdf文档,经测试根据模板导出word ...
- android ActionBarImpl can only be used with a compatible window decor layout
在Activity中添加 requestWindowFeature(Window.FEATURE_ACTION_BAR); requestWindowFeature(Window.FEATURE_AC ...
- WordPress基础:常用分类列表wp_list_categories
函数:wp_list_categories($args) 作用:列出某个分类下的分类项目 用法: <ul> <?php $args= array( 'depth'=>1, 'o ...
- 泛泰A860(高通8064 cpu 1080p) 刷4.4专用中文recovery TWRP2.7.1.2版(三版通刷)
欢迎关注泛泰非盈利专业第三方开发团队 VegaDevTeam (本team 由 syhost suky zhaochengw(z大) xuefy(大星星) tenfar(R大师) loogeo cr ...
- POJ1580 水题,积累!
[题意简述]:题意非常easy.就是将这两个字符串比較,移动着比較.求出最多的同样的元素个数.然后用题目中所给的公式,写出结果. [分析]:本题要注意的就是for循环的形式.注意积累就可以. 详见代码 ...