机器学习之scikit-learn初识
来源:互联网 发布:电子签章软件 编辑:程序博客网 时间:2024/06/03 23:48
上了一门机器学习课,实践平台老师推荐了Python和scikit-learn库。scikit-learn库包含有完善的文档和丰富的机器学习算法,在官方文档上每种算法都有讲解和应用示例(简直堪比老师课上的PPT)。
于是调查了一下这个库,目的是学习下它怎么用。
数据加载
第一步自然是数据加载,可以在UCIMachine Learning Repository网站上load,这个网站是个公开的机器学习数据集库,资源来自各种学校各种单位各种实验室各种数据库的贡献。数据集都不大,可以用来练习ML算法。
python是个强大的东西,我们可以直接用urllib从网站上load数据,再用numpy的函数加载:
(这里下的是经典的鸢尾花数据集,共150个data,分3类,每类50例,每例4个属性和1个类别标签)
import numpy as npfrom urllib import request# UCI dataset urlurl = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"raw_data = request.urlopen(url)x = np.loadtxt(raw_data, delimiter=",", usecols=(0,1,2,3))raw_data = request.urlopen(url)y = np.loadtxt(raw_data, delimiter=",", usecols=(4), dtype=str)
注:raw_data是网页请求的response内容,只能读取一次,所以y要再request一次。若想一次读取就要把data存到本地文件再加载。
# UCI dataset urlurl = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"raw_data = request.urlopen(url)page = raw_data.read()page = page.decode('utf-8')localFile = open('iris.csv','w')localFile.write(page)localFile.close()x = np.loadtxt('iris.csv', delimiter=',', usecols=(0,1,2,3))y = np.loadtxt('iris.csv', delimiter=',', usecols=(4), dtype=str)
另外,scikit-learn里也封装了加载lris这个经典数据集的方法,可以看下是怎样的,可是它封装得太好了所以并没有通用性:
from sklearn.datasets import load_irisiris = load_iris()x, y = iris.data, iris.target
数据标准化
大多数的梯度算法对数据的缩放都很敏感,所以在进行算法之前先对数据集做标准化(Normalization,让这些独立的样本具有统一的范数),或者规范化(Standardization,使数据所有的特征都有0期望和1方差)。
from sklearn import preprocessing# normalize the data attributesnormalized_x = preprocessing.normalize(x)# standardize the data attributesstandardized_x = preprocessing.scale(x)
特征选取
机器学习很重要的一步是数据特征的选取,它对算法应用的效果影响较大。
• 基于L1范数的特征提取(L1-based feature selection):
from sklearn.svm import LinearSVCfrom sklearn.feature_selection import SelectFromModel...lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(x, y)model = SelectFromModel(lsvc, prefit=True)x_new = model.transform(x)
x是(150,4),x_new是(150,3)。
• 树算法提取特征(Tree-based feature selection):from sklearn.ensemble import ExtraTreesClassifierfrom sklearn.feature_selection import SelectFromModel...clf = ExtraTreesClassifier()clf = clf.fit(x, y)print(clf.feature_importances_)model = SelectFromModel(clf, prefit=True)x_new = model.transform(x)x是(150,4),x_new是(150,2)。
• 递归特征消除算法(RFE,recursive feature elimination)提取特征,对特征集的搜索找到最好的子集:
from sklearn.feature_selection import RFEfrom sklearn.linear_model import LogisticRegression...model = LogisticRegression()# create the RFE model and select 3 attributesrfe = RFE(model, 3)rfe = rfe.fit(x, y)# summarize the selection of the attributesprint(rfe.support_)print(rfe.ranking_)
一些机器学习算法
逻辑回归(Logistic regression)
著名机器学习算法,逻辑回归大多数情况下被用来解决分类问题(二元分类),但多分类也适用。这个算法的优点是对于每一个输出的对象都有一个对应类别的概率。
from sklearn import metricsfrom sklearn.linear_model import LogisticRegression...model = LogisticRegression()model.fit(x, y)# make predictionsexpected = ypredicted = model.predict(x)# summarize the fit of the modelprint(metrics.classification_report(expected, predicted))print(metrics.confusion_matrix(expected, predicted))
朴素贝叶斯(naive bayes)
它也是最有名的机器学习算法之一,它的主要任务是恢复训练样本的数据分布密度。这个方法通常在多类的分类问题上表现的很好。
from sklearn import metricsfrom sklearn.naive_bayes import GaussianNB...model = GaussianNB()model.fit(x, y)# make predictionsexpected = ypredicted = model.predict(x)# summarize the fit of the modelprint(metrics.classification_report(expected, predicted))print(metrics.confusion_matrix(expected, predicted))
K-最邻近(k-nearest neighbor)
knn方法通常用于更复杂分类算法中,比如用它的估计值做为一个对象的特征。此外,这个算法在回归问题中通常表现出最好的质量。
from sklearn import metricsfrom sklearn.neighbors import KNeighborsClassifier...model = KNeighborsClassifier()model.fit(x, y)# make predictionsexpected = ypredicted = model.predict(x)# summarize the fit of the modelprint(metrics.classification_report(expected, predicted))print(metrics.confusion_matrix(expected, predicted))
决策树(Decision Trees)
分类和回归树(CART)经常被用于这么一类问题,在这类问题中对象有可分类的特征且被用于回归和分类问题。决策树很适用于多类分类。
from sklearn import metricsfrom sklearn.tree import DecisionTreeClassifier...model = DecisionTreeClassifier()model.fit(x, y)# make predictionsexpected = ypredicted = model.predict(x)# summarize the fit of the modelprint(metrics.classification_report(expected, predicted))print(metrics.confusion_matrix(expected, predicted))
支持向量机(Support vector machine)
SVM是最流行的机器学习算法之一,它主要用于分类问题,可以实现多类分类。同样也适用于逻辑回归。
from sklearn import metricsfrom sklearn.svm import SVC...model = SVC()model.fit(x, y)# make predictionsexpected = ypredicted = model.predict(x)# summarize the fit of the modelprint(metrics.classification_report(expected, predicted))print(metrics.confusion_matrix(expected, predicted))除了分类和回归,scikit-learn还有很多更复杂的算法,包括聚类、建立混合算法如Bagging和Boosting。
优化算法的参数
没有经验的情况下,scikit-learn也有提供函数寻找模型最优的参数。举个规则化参数选择的例子,可以在给定区间遍历数值,而有时随机取数效果更好:
import numpy as npfrom sklearn.linear_model import Ridgefrom sklearn.grid_search import GridSearchCV...# prepare a range of alpha values to testalphas = np.array([1,0.1,0.01,0.001,0.0001,0])# create and fit a ridge regression model, testing each alphamodel = Ridge()search = GridSearchCV(estimator=model, param_grid=dict(alpha=alphas))search.fit(x, y)# 比较参数search的结果print(search.best_score_)print(search.best_estimator_.alpha)用search.best_score_找到最优参数alpha
import numpy as npfrom scipy.stats import uniform as sp_randfrom sklearn.linear_model import Ridgefrom sklearn.grid_search import RandomizedSearchCV...# prepare a uniform distribution to sample for the alpha parameterparam_grid = {'alpha': sp_rand()}# create and fit a ridge regression model, testing random alpha valuesmodel = Ridge()search = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100)search.fit(x, y)# 比较随机取参数下算法的效果print(search.best_score_)print(search.best_estimator_.alpha)
以上是scikit-learn库一些基础算法的简单应用,更多的算法还是要放到实际中问题中才好分析效果。
scikit-learn是一个方便又强大的机器学习算法库,是一个非常优秀的学习ML的平台,怪不得很多教案都推荐它。
参考:
[1] http://scikit-learn.org/stable/user_guide.html
- 机器学习之scikit-learn初识
- Scikit-learn机器学习实战之Kmeans
- scikit-learn 机器学习
- 机器学习之机器学习库scikit-learn
- 机器学习scikit-learn入门教程
- 机器学习 scikit-learn 图谱
- 机器学习 scikit-learn安装
- scikit-learn 机器学习介绍
- 机器学习scikit-learn入门教程
- ]scikit-learn进行机器学习
- scikit-learn机器学习库
- 机器学习scikit-learn入门教程
- 机器学习之pip安装scikit-learn问题解决
- 使用scikit-learn进行机器学习(scikit-learn教程1)
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 |
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习
- SpringMVC学习之前期小结
- springcloud feign 讲解
- PDSOFT2.5中科辅龙_最新版_USB加密锁运行稳定版.rar
- spring bean初始化过程
- python3/tensorflow1.1
- 机器学习之scikit-learn初识
- vxworks启动WDB没起来这从硬盘起来的,从网络起来没有问题
- swift中闭包block的使用
- Django后台管理系列之四
- mysql索引总结----mysql 索引类型以及创建
- 909422229_Hibernate第一节环境配置
- Linux下特有的reboot()函数的简介
- 浅谈数字音视频传输网络——AVB
- FLV学习(二)FLV封装原理