整理上课内容

加载数据集
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

 

原文地址:https://www.cnblogs.com/hany-postq473111315/p/12758012.html