zoukankan      html  css  js  c++  java
  • 整理上课内容

    加载数据集
    sklearn.datasets 集成了部分数据分析的经典数据集·
    load_boston 回归
    load_breast_cancer 分类 聚类
    fetch_california_housing 回归
    load_iris 分类 聚类
    load_digits 分类
    load_wine 分类
    
    from sklearn.datasets import load_breast_cancer
    cancer=load_ breast_cancer()
    print('breast_cancer数据集的长度为:',len(cancer))
    print('breast_cancer数据集的类型为:',type(cancer))
    数据集可以看作字典
    可以使用 data target feature_names DESCR
    分别获取数据集的数据 标签 特征名称 描述信息
    cancer['data'] cancer['target']
    cancer['feature_names'] cancer['DESCR']
    
    将样本分为三部分
        训练集(train set)用于估计模型
        验证集(validation set) 用于确定 网络结构 或 控制模型复杂程度 的参数
        测试集(test set) 检验最优的模型的性能
    占比
        50%  25%  %25
    通过一些数据建立一些模型 通过模型可以将新数据分组
    
    K折交叉验证法
    常用的方法是留少部分做测试集
        对其余 N 个样本采用 K 折交叉验证法
        将样本打乱 均匀分成K份。
        轮流选择其中 K-1 份做训练 剩余的一份做验证。
        计算预测误差平方和 把K次的预测误差平方和的均值作为选择最优模型结构的依据
    
    对数据集进行拆分
    sklearn.model_selection 的 train_test_split 函数
    参数
        *arrays 接收一个或多个需要划分的数据集
                分类->数据和标签
                聚类->数据
        test_size 接收 float int None 数据
                    表示测试集的大小
                float 类型  0-1 之间 表示测试集在总数中的占比
                int 类型 表示测试集的绝对数目
                test_size 默认为 25%
        train_size 接收 float int None 类型的数据
                表示训练集的大小 和 test_size 只能有一个
        random_state 接收 int 类型 表示随机种子的编号
                相同随机种子编号产生相同的随机结果
                不同的随机种子编号产生不同的随机结果
        shuffle 接收布尔类型 代表是否进行有放回抽样’
        stratify 接收 array标签 或者 None
                使用标签进行分层抽样
    
    train_test_split 函数根据传入的数据
        分别将传入的数据划分为训练集和测试集
    如果传入的是1组数据,那么生成的就是这一组数据随机划分后训练集和测试集
    如果传入的是2组数据,则生成的训练集和测试集分别2组
    
    将breast_cancer数据划分为训练集和测试集
    from sklearn.model_selection import train_test_split
    cancer_data_train,cancer_data_test,cancer_target_train,cancer_target_test
    = train_test_split(cancer_data,cancer_target,test_size=0.2,random_state=42)
    .shape 查看形状
    
    numpy.max() 查看最大值
    
    使用 sklearn 转换器
        fit 分析特征和目标值,提取有价值的信息 如 统计量 或 权值系数等。
        transform 对特征进行转换
            无信息转换 指数和对数函数转换等
            有信息转换
                无监督转换
                    只利用特征的统计信息 如 标准化 和 PCA 降维
                有监督转换
                    利用 特征信息 和 目标值信息 如通过模型->选择特征 LDA降维等
        fit_tranform 先调用 fit 方法 然后调用 transform 方法
    
    使用 sklearn 转换器 能够实现对传入的 Numpy数组
        进行标准化处理、归一化处理、二值化处理、PCA降维等操作
    注 各类特征处理相关的操作都要将 训练集和测试集 分开
        将训练集的操作规则、权重系数等应用到测试集中
    
    .shape 查看形状
    
    sklearn 提供的方法
        MinMaxScaler 对特征进行离差标准化
        StandardScaler 对特征进行标准差标准化
        Normalizer 对特征进行归一化
        Binarizer 对定量特征进行二值化处理
        OneHotEncoder 对定性特征进行独热编码处理
        Function Transformer 对特征进行自定义函数变换
    
    from sklearn.decomposition import PCA
    PCA 降维算法常用参数及作用
        n_components 接收 None int float string 参数
            未指定时,代表所有特征都会保留下来
            int -> 降低到 n 个维度
            float 同时 svd_solver 为full
            string  如 n_components='mle'
                自动选取特征个数为 n 满足所要求的方差百分比 默认为 None
    
        copy 接收 布尔类型数据
            True 运行后 原始数据不会发生变化
            False 运行 PCA 算法后,原始数据 会发生变化
            默认为 True
    
        whiten 接收 布尔类型数据
            表示白化 对降维后的数据的每个特征进行归一化
            默认为 False
    
        svd_solver 接收 'auto' 'full' 'arpack' 'randomized'
            默认为auto
            auto 代表PCA类会自动在上述三种算法中去权衡 选择一个合适的SVD算法来降维
            full 使用SciPy库实现的传统SVD算法
            arpack 和randomized的适用场景类似
                区别是 randomized 使用的是 sklearn 的SVD实现
                    而arpack直接使用了 SciPy 库的 sparse SVD实现
            randomized 一般适用于数据量大 数据维度多 同时主成分数目比例又较低的PCA降维 使用一些加快SVD的随机算法
    
    聚类分析 在没有给定 划分类别 的情况下,根据 数据相似度 进行样本分组的一种方法
    聚类模型 可以将 无类标记的数据 聚集为多个簇 视为一类 是一种 非监督的学习算法
    聚类的输入是 一组未被标记的样本
        根据 自身的距离 或 相似度 将他们划分为若干组
        原则 组内样本最小化 组间距离最大化
    
    常用的聚类算法
        划分方法
            K-Means算法(K-平均)
            K-MEDOIDS算法(K-中心点)
            CLARANS算法(基于选择的算法)
    
        层次分析方法
            BIRCH算法(平衡送代规约和聚类)
            CURE算法(代表点聚类)
            CHAMELEON算法(动态模型)
    
        基于密度的方法
            DBSCAN算法(基于高密度连接区域)
            DENCLUE算法(密度分布函数)
            OPTICS算法(对象排序识别)
    
        基于网格的方法
            STING算法(统计信息网络)
            CLIOUE算法(聚类高维空间)
            WAVE-CLUSTER算法(小波变换)
    
    sklearn.cluster 提供的聚类算法
        函数名称  K-Means
        参数  簇数
        适用范围  样本数目很大 聚类数目中等
        距离度量  点之间的距离
    
        函数名称  Spectral clustering
        参数  簇数
        适用范围  样本数目中等 聚类数目较小
        距离度量  图距离
    
        函数名称  Ward hierarchical clustering
        参数  簇数
        适用范围  样本数目较大 聚类数目较大
        距离度量  点之间的距离
    
        函数名称  Agglomerative clustering
        参数  簇数 链接类型 距离
        适用范围  样本数目较大 聚类数目较大
        距离度量  任意成对点线图间的距离
    
        函数名称  DBSCAN
        参数  半径大小 最低成员数目
        适用范围  样本数目很大 聚类数目中等
        距离度量  最近的点之间的距离
    
        函数名称  Birch
        参数  分支因子 阈值 可选全局集群
        适用范围  样本数目很大 聚类数目较大
        距离度量  点之间的欧式距离
    
    聚类算法实现需要sklearn估计器 fit 和 predict
        fit 训练算法 接收训练集和标签
            可用于有监督和无监督学习
        predict 预测有监督学习的测试集标签
            可用于划分传入数据的类别
    将规则通过 fit 训练好后 将规则进行 预测 predict
        如果存在数据 还可以检验规则训练的好坏
    
    引入离差标准化
    from sklearn.preprocessing import MinMaxScaler
    
    from sklearn.datasets import load_iris
    from sklearn.cluster import K-Means
    iris = load_iris()
    
    数据集的特征
    iris_data = iris['data']
    
    数据集的标签
    iris_target = iris['target']
    
    数据集的特征名
    iris_names = iris['feature_names']
    
    训练规则
    scale = MinMaxScaler().fit(iris_data)
    
    应用规则
    iris_dataScale = scale.transform(iris_data)
    
    构建并训练模型
    kmeans = KMeans(n_components = 3,random_state = 123).fit(iris_dataScale)
        n_components = 3  分为三类
    
    预测模型
    result = kmeans.predict([[1.5,1.5,1.5,1.5]])
    
    查看预测类别
    result[0]
    
    使用 sklearn.manifold 模块的 TSNE 函数
        实现多维数据的可视化展现
        原理 使用 TSNE 进行数据降维
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.manifold import TSNE
    使用 TSNE 进行数据降维 降为两维
    tsne = TSNE(n_components = 2,init = 'random',random_state = 177).fit(iris_data)
        n_components = 2 降为两维
    
    将原始数据转换为 DataFrame 对象
    df = pd.DataFrame(tsne.embedding_)
        转换为二维表格式
    
    将聚类结果存到 df 数据表中
    df['labels'] = kmeans.labels_
    
    提取不同标签的数据
    df1 = df[df['labels'] == 0]
    df2 = df[df['labels'] == 1]
    df3 = df[df['labels'] == 2]
    
    绘制图形
    fig = plt.figure(figsize = (9,6))
    
    使用不同的颜色表示不同的数据
    plt.plot(df1[0],df1[1],'bo',df2[0],df2[1],'r*')
    
    储存为 .png 图片
    plt.savefig('../tmp/名称.png')
    plt.show()
    
    聚类模型评价指标
        标准
            组内的对象相互之间是相似的(相关的)
            不同组中的对象是不同的(不相关的)
    sklearn.metrics 提供评价指标
        ARI评价法(兰德系数) adjusted _rand_score
        AMI评价法(互信息) adjusted_mutual_info_score
        V-measure评分 completeness_score
        FMI评价法 fowlkes_mallows_score
        轮廓系数评价法 silhouette _score
        Calinski-Harabasz指数评价法 calinski_harabaz_score
            前四种更有说服力 评分越高越好
    聚类方法的评价可以等同于分类算法的评价
    
    FMI评价法 fowlkes_mallows_score
    from sklearn.metrics import fowlkes_mallows_score
    for i in range(2,7):
        kmeans =KMeans(n_clusters =i,random_state=123).fit(iris_data)
        score = fowlkes_mallows_score(iris_target,kmeans.labels_)
        print('iris数据聚 %d 类FMI评价分值为:%f'%(i,score))
    
    轮廓系数评价法 silhouette_score
    from sklearn.metrics import silhouette_score
    import matplotlib.pyplot as plt
    
    silhouettteScore=[]
    for i in range(2,15):
        kmeans=KMeans(n_clusters =i,random state=123).fit(iris data)
        score = silhouette_score(iris_data,kmeans.labels_)
        silhouettteScore.append(score)
    plt.figure(figsize=(10,6))
    plt.plot(range(2,15),silhouettteScore,linewidth=1.5,linestyle="-")
    plt.show()
    
    使用 Calinski-Harabasz 指数评价 K-Means 聚类模型
        分值越高聚类效果越好
    from sklearn.metrics import calinski_harabaz_score
    for i in range(2,7):
        kmeans=KMeans(n_clusters =i,random_state=123).fit(iris_data)
        进行评价
        score=calinski_harabaz_score(iris_data,kmeans.labels_)
        print'iris数据聚%d类calinski harabaz指数为:%f'%(i,score)
    
    构建并评价分类模型(有监督学习)
        输入样本的特征值 输出对应的类别
        将每个样本映射到预先定义好的类别
        分类模型建立在已有模型的数据集上
    
        用于 图像检测 物品分类
    
    分类算法
    模块名            函数名称            算法名称
    linear_model LogisticRegression 逻辑斯蒂回归
    svm             SVC                支持向量机
    neighbors    KNeighborsClassifier K最近邻分类
    naive_bayes      GaussianNB        高斯朴素贝叶斯
    tree        DecisionTreeClassifier 分类决策树
    ensemble RandomForestClassifier  随机森林分类
    ensemble GradientBoostingClassifier 梯度提升分类树
    
    以 breast_cancer 数据为例 使用sklearn估计器构建支持向量机(SVM)模型
    
    import numpy as np
    from sklearn.datasets import load_breast.cancer
    from sklearn.svm import SVC
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    
    cancer = load_breast_cancer()
    cancer_data = cancerf['data']
    Cancer_target = cancert['target']
    cancer_names = cancer['feature_names']
    
    建立 SVM 模型
    svm = SVC().fit(cancer_trainStd,cancer_target_train)
    
    预测训练集结果
    cancer_target_pred = svm.predict(cancer_testStd)
    
    将预测结果和真实结果比对 求出预测对的结果和预测错的结果
    true = np.sum(cancer_target_pred == cancer_target_test)
    预测对的结果的数目
    true
    预测错的结果的数目
    cancer_target_test.shape[0] - true
    准确率
    true/cancer_target_test.shape[0]
    
    评价分类模型
    分类模型对测试集进行预测得到的准确率并不能很好的反映模型的性能
    结合真实值->计算准确率、召回率 F1 值和 Cohen's Kappa 系数等指标
    
    方法名称             最佳值         sklearn 函数
    Precision(精确率)    1.0      metrics.precision_score
    Recall(召回率)         1.0        metrics.recall_score
    F1值                    1.0        metrics.f1_score
    Cohen's Kappa 系数    1.0     metrics.cohen_kappa_score
    ROC曲线              最靠近y轴    metrics.roc_curve
    
    from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score,cohen_kappa_score
    
    使用SVM预测breast_cancer数据的准确率为
    accuracy_score(cancer_target_test,cancer_target_pred)
    使用SVM预测breast_cancer数据的精确率为
    precision_score(cancer_target_test,cancer_target_pred)
    
    绘制ROC曲线
    from sklearn.metrics import roc_curve
    import matplotlib.pyplot as plt
    求出ROC曲线的x轴和y轴
    fpr,tpr,thresholds = roc_curve(cancer_target_test,cancer_target_pred)
    plIt.figure(figsize=(10,6))
    plt.xlim(O,1)##设定x轴的范围
    plt.ylim(0.0,1.1)##设定y轴的范围
    plt.xlabel('False Postive Rate')
    plt.ylabel('True Postive Rate')
    plt.plot(fpr,tpr,linewidth=2,linestyle=*-".color='red")
    plt.show()
    
    ROC曲线 与 x 轴面积越大 模型性能越好
    
    构建并评价回归模型
    分类和回归的区别
        分类算法的标签是离散的
        回归算法的标签是连续的
    作用 交通 物流 社交网络和金融领域等
    
    回归模型
        自变量已知
        因变量未知 需要预测
    回归算法实现步骤 分为 学习 和 预测 两个步骤
        学习 通过训练样本数据来拟合回归方程
        预测 利用学习过程中拟合出的回归方程 将测试数据放入方程中求出预测值
    
    回归算法
    模块名称        函数名称        算法名称
    linear_model LinearRegression 线性回归
    svm         SVR         支持向量回归
    neighbors KNeighborsRegressor 最近邻回归
    tree     DecisionTreeRegressor 回归决策树
    ensemble RandomForestRegressor 随机森林回归
    ensemble GradientBoostingRegressor 梯度提升回归树
    
    以boston数据集为例 使用skllearn估计器构建线性回归模型
    from sklearn.linear_model import LinearRegression
    from sklearn.datasets import load_boston
    from sklearn.model_selection import train_test_split
    boston = load_boston()
    X = boston['data']
    y = boston['target']
    names = boston['feature_names']
    
    划分训练集和测试集
    X_train,X_test,y_train,y_test = train_test_split(X,Y.test_size=0.2,random_state=125)
    建立线性回归模型
    clf = LinearRegression().fit(X_train.y_train)
    预测训练集结果
    y_pred = clf.predict(X_test)
    前二十个结果
    y_pred[:20]
    使用不同的颜色表示不同的数据
    plt.plot(range(y_test.shape[0]),y_test,color='blue',linewidth=1.5,linestyle='-')
    
    评价回归模型
    方法名称        最优值        sklearn函数
    平均绝对误差     0.0    metrics.mean_absolute_error
    均方误差         0.0    metrics.mean_squared_error
    中值绝对误差     0.0    metrics.median_absolute_error
    可解释方差值     1.0    metrics.explained_variance_score
    R方值         1.0    metrics.r2_score
    
    平均绝对误差 均方误差和中值绝对误差的值越靠近 0
        模型性能越好
    可解释方差值 和 R方值 则越靠近1 模型性能越好
    
    
    from sklearn.metrics import explained_variance_score,mean_absolute_error,mean_squared_error,median_absolute_error,r2_score
    Boston数据线性回归模型的平均绝对误差为
    mean_absolute_error(y_test,y_pred)
    Boston数据线性回归模型的均方误差为
    mean_squared_error(y_test,y _pred)
    Boston数据线性回归模型的中值绝对误差为
    median_absolute_error(y_test,y_pred)
    Boston数据线性回归模型的可解释方差值为
    explained_variance_score(y_test,y_pred)
    Boston数据线性回归模型的R方值为
    r2_score(y test,y_pred)

    2020-04-23

     

    构建并评价模型实例
    实例1 Seeds数据集存放了不同品种小麦种子的
        区域 周长 压实度 籽粒长度 籽粒宽带 不对称系数 籽粒腹沟长度 类别数据
            该数据集总共210条记录 7个特征 一个标签 标签分3类
    
    构建K-Means聚类模型
    import pandas as pd
    from sklearn.preprocessing import StandardScaler
    from sklearn.cluster import KMeans
    seeds=pd.read_csv('../data/seeds_dataset.txt',sep='	')
    print('数据集形状为:',seeds.shape)
    处理数据
    seeds_data = seeds.iloc[:7].values
    seeds_target = seeds.ilocl[:,7].values
    sees_names = seeds.columns[:7]
    stdScale = StandardScaler().fit(seeds_data)
    seeds_dataScale = stdScale.transform(seeds_data)
    构建并训练模型
    kmeans = KMeans(n_clusters= 3,random_state=42).fit(seeds_data)
    print('构建的KM-eans模型为:
    ',kmeans)
    
    
    评价构建的K-Means聚类模型
    from sklearn.metrics import calinski_harabaz_score
        for iin range(2,7):
            kmeans = KMeans(n_clusters= i,random_state=12).fit(seeds_data)
            score = calinski_harabaz_score(seeds_data,kmeans.labels_)
            print('seeds数据聚%d类calinski_harabaz指数为 :%f'%(i,score))
    
    实例2 常规的鲍鱼年龄 通过 性别、长度、高度、壳体重量等 预测年龄
    使用SVM实现分类
    import pandas as pd
    from sklearn.svm import SVC
    from sklearn.metrics import classification_report
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    abalone = pd.read_csv('./data/abalone.data',sep=',')
    
    将数据和标签拆开
    abalone_data=abalone.iloc[::8]
    abalone_target=abalone.ilocl:,8]
    
    连续型特征离散化
    sex = pd.get_dummies(abalone_data['sex'])
    abalone_data = pd.concat([abalone_data,sex],axis=1)
    abalone_data.drop('sex',axis=1,inplace=True)
    
    划分训练集 测试集
    abalone_train,abalone_test,abalone_target_train,abalone_target_test = train_test_split(abalone_data,abalone_target,train_size=0.8,random_state=42)
    
    标准化
    stdScaler = StandardScaler().fit(abalone_train)
    abalone_std_train = stdScaler.transform(abalone_train)
    abalone_std_test = stdScaler.transform(abalone_test)
    
    建模
    svm_abalone = SVC().fit(abalone_std_train,abalone_target_train)
    
    评价构建的SVM分类模型
    abalone_target_pred = svm_abalone.predict(abalone_std_test)
    classification_report(abalone_target_test,abalone_target_pred)
    
    
    实例3 通过房子的8个外在条件来评估房子的平均价值
    使用sklearn估计器建立回归模型实现对房子的评价
    import pandas as pd
    from sklearn.ensemble import GradientBoostingRegressor
    from sklearn.model_selection import train_test_split
    house = pd.read_csv('../data/cal_housing.data',sep=',')
    house_data = house.iloc[:,:-1]
    house_target=house.iloc[:,-1]
    
    house_names=['longitude','latitude', 'housingMedianAge','totalRooms', 'totalBedrooms','population', 'households','medianlncome']
    
    house_train,house_test,house_target_train,house_target_test = train_test_split(house_data,house_target,test_size=0.2,random_state=42)
    GBR_house = GradientBoostingRegressor().fit(house_train,house_target_train)
    
    评价构建的线性回归模型
    house_target_pred = GBR_house.predict(house_test)
    from sklearn.metrics import explained_variance_score,mean_absolute_error,mean_squared_error,median_absolute_error,r2_score
    
    california_housing数据梯度提升回归树模型的平均绝对误差为
    mean_absolute_error(house_target_test,house_target_pred)
    
    california_housing数据梯度提升回归树模型的均方误差为
    mean_squared_error(house_target_test,house_target_pred)
    
    california_housing数据梯度提升回归树模型的中值绝对误差为
    median_absolute_error(house_target_test,house_target_pred)
    
    california_housing数据梯度提升回归树模型的可解释方差值为
    explained_variance_score(house_target_test,house_target_pred)
    
    california_housing数据梯度提升回归树模型的R方值为
    r2_score(house_target_test,house_target_pred)

     


    2020-04-23

     

  • 相关阅读:
    DB2、ORACLE SQL写法的主要区别
    最快的序列化组件protobuf的.net版本protobuf.net
    Oracle迁移到DB2常用转换
    模拟百度分页算法
    MySQL 自关联查询
    python 实现cm批量上传
    python实现京东秒杀
    百度地图商家爬虫
    django BBS
    python 堆排序
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12758012.html
Copyright © 2011-2022 走看看