美文网首页AI学习笔记
机器学习笔记(1)-sklearn概况及API

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

作者: Spytensor | 来源:发表于2017-10-22 17:10 被阅读2354次

    第一部分: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

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

    相关文章

      网友评论

      本文标题:机器学习笔记(1)-sklearn概况及API

      本文链接:https://www.haomeiwen.com/subject/grwguxtx.html