机器学习笔记(1)-sklearn概况及API

第一部分:sklearn主要模块和使用方法

1. sklearn的六大板块:

  • 分类: Classification
  • 回归: Regression
  • 聚类:Clustering
  • 维数约简:Dimensional Reduction
  • 模型选择:Model Selection
  • 数据预处理:Preprocessing

2. 监督学习/无监督学习下的各个模块及调用方法

2.1 监督学习的各个模块
  • neighbors: 近邻算法
  • SVM: 支持向量机
  • kernal_ridge: 核岭回归
  • discriminant_analysis: 判别分析
  • linear_model: 广义线性模型
  • ensemble: 集成方法
  • tree: 决策树
  • naive_bayes: 朴素贝叶斯
  • cross_decomposition: 交叉分解
  • gaussion_process: 高斯过程
  • neural_network: 多层神经网络
  • calibration: 概率校准
  • isotonic: 保序回归
  • feature_selection: 监督特征选择
  • multiclass: 多类多标签算法
2.2 无监督学习各个模块
  • decomposition: 矩阵因子分解
  • cluster: 聚类分析
  • manifold: 流行学习
  • mixture: 高斯混合模型
  • neural_network: 无监督神经网络
  • density: 密度估计
  • covariance: 协方差估计
2.3 数据变换模块
  • feature_extraction: 特征提取
  • feature_selection: 特征选择
  • preprocessing: 数据预处理
  • random_projection: 随机投影
  • kernal_approximation: 核逼近
  • pipline: 管道流

调用方法:from sklearn import model(model 表示对应的模型)
例如:调用决策树回归分析模块
from sklearn import tree
model = tree.DecisionTreeRegressor()

3. API调用方法

3.1 统一调用
estimator.fit(x_train,[y_train]) [ ]表示无监督模块无y
estimator.predict(x_test) estimator.transform(x_test)
Classification Preprocessing
Regression Dimensionally Reduction
clustering Feature Extraction
Feature Selection
3.2 数据集的加载方式 Dataset Loading
  1. sklearn自带的小数据集的加载(Packaged Dataset)
    sklearn.datasets.load_datanema(对应的数据集名称,可在官方API介绍中查看)
    以导入波士顿房价数据集为例:
    sklearn.datasets.load_boston
  2. 在线下载的数据集(Downloadable Dataset)
    sklearn.datasets.fetch_dataname(下载的数据集名称)
  3. 计算机生成的数据集(Generated_Dataset)
    sklearn.datasets.make_dataname(生成的数据集名称)
  4. svmlight/libsvm 格式的数据集
    sklearn.datasets.load_svmlight_file(对应文件在磁盘中的地址)
  5. mldata.org(一个机器学习数据集网站)在线下载获取数据集

注:更多API接口在需要的时候从官方API介绍查看使用。

4.利用sklearn进行分析的基本流程

  1. 准备我们所需要的数据集即加载数据集 (Loading datasets)
    --选择合适的方式将我们要处理的数据集加载到内存中,这里以从UCI下载的数据集为例
#python3.6
import numpy as np
import urllib
# 导入数据集所在网址
url = "http://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
# 借用urlopen 将数据集导入
raw_data = urllib.urlopen(url)
# 以矩阵形式存储数据
dataset = np.loadtxt(raw_data, delimiter=",")
# 观察数据特征并进行适当的切分
X = dataset[:,0:7]
y = dataset[:,8]

  1. 数据处理 (Preprocessing)
    -- 由于我们所用到的大多数机器学习回归算法以梯度下降法为主,且对数据的缩放和尺度较为敏感,所以我们在使用数据前应该进行数据归一化,归至(-1,1)或者(0,1)之间。
    -- 不过sklearn作为强大的机器学习模块,已经内置了normalize(),scale()等函数,便于我们对数据的归一化。
#归一化在数据预处理板块中
from sklearn import preprocessing
# normalize the data attributes
normalized_X = preprocessing.normalize(X)
# standardize the data attributes
standardized_X = preprocessing.scale(X)

  1. 特征选择 (Feature selection)
    -- 根据已有数据要想拟合出我们需要的回归曲线,最重要的就是特征选择,到底数据集中的哪些规律值得我们重视呢?
    -- 往往在面对不同的实际问题时,对应的特征复杂程度也不同,这需要很强的专业知识,但做为初学者,sklearn内置的函数就够我们进行分析使用。
#以决策树的特征提取为例
from sklearn import metrics
from sklearn.ensemble import ExtraTreesClassifier
model = ExtraTreesClassifier()
model.fit(X, y)
  1. 算法的选择(Choose the algorithm)
    -- 针对不同的问题我们可以选择不同的回归方法进行分析,具体展示在下面一栏。

5. 常用回归分析的实现及对比

5.1 首先我们准备下所需要的数据集,这里的数据采用计算机随机生成。

import numpy as np 
import matplotlib.pyplot as plt 

#Prepare the data we need
def f(x1,x2):
    y = 0.5 * np.sin(x1) + 0.5 * np.cos(x2) + 0.1 * x1 + 3
    return y 
#creat training data and test data
def LoadData():
    x1_train = np.linspace(0, 50,500)
    x2_train = np.linspace(-10, 10,500)
    data_train = np.array([[x1,x2,f(x1, x2) + (np.random.random(1)-0.5)] for x1,x2 in zip(x1_train, x2_train)])
    x1_test = np.linspace(0, 50,100) + 0.5 * np.random.random(100)
    x2_test = np.linspace(-10, 10,100) + 0.02 * np.random.random(100)
    data_test = np.array([[x1,x2,f(x1, x2)] for x1,x2 in zip(x1_test, x2_test)])
    return data_train,data_test
train,test = LoadData()
x_train,y_train = train[:,:2],train[:,2] 
x_test,y_test = test[:,:2],test[:,2]

5.2 定义拟合函数,以便重复调用实现不同的回归方法

def TryDifferentMethod(model):
    model.fit(x_train,y_train)
    score = model.score(x_test,y_test)
    result = model.predict(x_test)
    plt.figure()
    plt.plot(np.arange(len(result)),y_test,'go-',label='true value')
    plt.plot(np.arange(len(result)),result,'ro-',label='predict value')
    plt.title('score:%f'%score)
    plt.legend()
    plt.show()

5.3 这里使用经常用到的五种回归方法进行展示

# 1.DecisionTree Regression
from sklearn import tree
model_DecisionTreeRegressor = tree.DecisionTreeRegressor()
#TryDifferentMethod(model_DecisionTreeRegressor)

# 2.LinearRegression
from sklearn import linear_model
model_LinearRegression = linear_model.LinearRegression()
#TryDifferentMethod(model_LinearRegression)

# 3.SVM Regression
from sklearn import svm
model_SVMRegression = svm.SVR()
#TryDifferentMethod(model_SVMRegression)

# 4.KNN Regression
from sklearn import neighbors
model_KNeighborsRegressor = neighbors.KNeighborsRegressor()
#TryDifferentMethod(model_KNeighborsRegressor)

# 5.RandomForest Regression
from sklearn import ensemble
model_RandomForestRegressor = ensemble.RandomForestRegressor(n_estimators=22) # Use 22 Decision Trees
#TryDifferentMethod(model_RandomForestRegressor)

为了更明显的对比初差距,将可视化后的图像呈现出来:
1.线性回归方法

LinearRegression.png

2.决策树回归方法


DecisionTree.png

3.支持向量机回归方法

SVMRegression.png

4.KNN回归方法

KNN_Regression.png

5.随机森林回归方法

RandomForestRegression.png

接下来,就开始一个个搞了,先从这些回归方法的内置函数搞起。。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容