sklearn 机器学习解题套路框架

前言

对于sklearn中的机器学习中大多可以分为以下5步
1 数据集的获取(处理)
2 数据集的预处理(规范化和降维)
3 数据集的拆分(用户评价模型)
4 模型的选择
5 模型的评价
在这里插入图片描述

1 整体模型框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzHTOy10-1609035777056)(attachment:image.png)]

1.1 数据集获取:

skleran.datasets下常用的数据集

数据集的加载函数            数据集任务类型
load_boston                   回归
fetch_california_housing      回归
load_digits                   分类
load_breast_cancer            分类、聚类
load_iris                     分类、聚类
load_wine                     分类

使用形式:sklearn.datasets.数据集加载函数

eg:获取load_boston数据集

           sklearn.datasets.load_boston

(注意数据集的一些属性特征,例如维度,标签等–可查询官方文档进行调用)

1.2 数据预处理:

1.2.1 数据集的规范化

sklearn.preprocessing下常用预处理函数

函数名称                   说明
StandardScaler           对特征进行标准差标准化
Normalizer               对特征进行归一化
Binarizer                对定量特征进行二值化处理
OneHotEncoder            对定性特征进行独热编码处理
FunctionTransformer      对特征进行自定义函数变换

使用形式:

1 导入规范函数
2 生成规则
3 将规则作用与数据集

eg:由训练集生成离差标准化规则后,将规则作用与训练集和预测集

import numpy as np
from sklearn.preprocessing import MinMaxScaler
Scaler = MinMaxScaler().fit(cancer_data_train) ##生成规则
##将规则应用于训练集
cancer_trainScaler = Scaler.transform(cancer_data_train) 
##将规则应用于测试集
cancer_testScaler = Scaler.transform(cancer_data_test)

1.2.2 数据集的降维

sklearn.decomposition下常用降维函数,一般使用PCA降维

PCA降维函数:

PCA(n_components=None【, *, copy=True, whiten=False, svd_solver='auto', tol=0.0, iterated_power='auto', random_state=None】)

PCA降维函数中常用参数说明:
在这里插入图片描述
使用形式:

1) 调入函数(train_test_split)
2) 传入数据集和拆分比例
3) 拆分(注意拆分的返回)

eg:对数据集生成降维规则后,对数据进行降维

from sklearn.decomposition import PCA
pca_model = PCA(n_components=10).fit(cancer_trainScaler) ##生成规则
cancer_trainPca = pca_model.transform(cancer_trainScaler) ##将规则应用于训练集
cancer_testPca = pca_model.transform(cancer_testScaler) ##将规则应用于测试集

1.3 数据集的拆分

拆分训练集和测试集——用来模型的评分

拆分函数:

sklearn.model_selection.train_test_split(*arrays,**options)

参数说明:

*arrays  代表划分的数据集。聚类,则传入数据。分类回归,传入数据和标签
test_size 测试集集大小
train_size 训练集大小
random_state 接收int。代表随机种子
shuffle 默认True,表示是否放回抽样
stratify 接收array或者None。如果不为None,则使用传入的标签进行分层抽样

使用形式:

1) 调入函数(train_test_split)
2) 传入数据集和拆分比例
3) 拆分(注意拆分的返回)

eg:对分类数据集中的训练集和测试集进行拆分

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)

1.4 模型的选择

1.4.1 聚类——sklearn.cluter下提供的聚类方法

1.4.2 分类——大多分布在sklearn下的一级模块

在这里插入图片描述

1.4.3 回归——多分布在sklearn下的一级目录

在这里插入图片描述

1.5 模型评价

1.5.1 metrics下的聚类评价

在这里插入图片描述

1.5.2 metrics下的分类评价

1.5.3 metrics下的回归评价

2 K-Means聚类举例

# 1 获取数据
import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
seeds = pd.read_csv('../data/seeds_dataset.txt',sep = '\t')
print('数据集形状为:', seeds.shape)

## 2 数据预处理
seeds_data = seeds.iloc[:,:7].values
seeds_target = seeds.iloc[:,7].values
sees_names = seeds.columns[:7]
stdScale = StandardScaler().fit(seeds_data)
seeds_dataScale = stdScale.transform(seeds_data)

## 3 构建并训练模型
kmeans = KMeans(n_clusters = 3,random_state=42).fit(seeds_data)
print('构建的KM-eans模型为:\n',kmeans)

# 4 模型的评价
from sklearn.metrics import calinski_harabaz_score
for i in 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))
数据集形状为: (210, 8)
构建的KM-eans模型为:
 KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
       n_clusters=3, n_init=10, n_jobs=None, precompute_distances='auto',
       random_state=42, tol=0.0001, verbose=0)
seeds数据聚2类calinski_harabaz指数为:351.179992
seeds数据聚3类calinski_harabaz指数为:375.804961
seeds数据聚4类calinski_harabaz指数为:327.835320
seeds数据聚5类calinski_harabaz指数为:310.331840
seeds数据聚6类calinski_harabaz指数为:302.473069

3 SVM分类模型举例

## 1 获取数据
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=',')

## 2 数据预处理
# 将数据和标签拆开
abalone_data = abalone.iloc[:,:8]
abalone_target = abalone.iloc[:,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)

## 3 数据的划分
# 划分训练集,测试集
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)

## 4 模型选择并训练
# 建模
svm_abalone = SVC().fit(abalone_std_train,abalone_target_train)
print('建立的SVM模型为:','\n',svm_abalone)

## 5 模型的评价
abalone_target_pred = svm_abalone.predict(abalone_std_test)
print('abalone数据集的SVM分类报告为:\n',
      classification_report(abalone_target_test,abalone_target_pred))

建立的SVM模型为: 
 SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
    decision_function_shape='ovr', degree=3, gamma='auto_deprecated',
    kernel='rbf', max_iter=-1, probability=False, random_state=None,
    shrinking=True, tol=0.001, verbose=False)
abalone数据集的SVM分类报告为:
               precision    recall  f1-score   support

           3       0.00      0.00      0.00         3
           4       0.45      0.69      0.55        13
           5       0.54      0.22      0.31        32
           6       0.40      0.33      0.36        48
           7       0.41      0.44      0.42        84
           8       0.37      0.36      0.37        99
           9       0.28      0.57      0.38       142
          10       0.24      0.33      0.28       139
          11       0.25      0.25      0.25        93
          12       0.00      0.00      0.00        51
          13       0.00      0.00      0.00        31
          14       0.00      0.00      0.00        26
          15       0.00      0.00      0.00        21
          16       0.00      0.00      0.00        13
          17       0.00      0.00      0.00         8
          18       0.00      0.00      0.00        12
          19       0.00      0.00      0.00         7
          20       0.00      0.00      0.00         4
          21       0.00      0.00      0.00         3
          22       0.00      0.00      0.00         3
          23       0.00      0.00      0.00         4

    accuracy                           0.31       836
   macro avg       0.14      0.15      0.14       836
weighted avg       0.25      0.31      0.26       836

4 Liner Regression回归举例

# 1 数据获取
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', 'medianIncome']

# 2 数据集的划分
house_train,house_test,house_target_train,house_target_test = \
train_test_split(house_data,house_target,
    test_size = 0.2, random_state = 42)

# 3 模型选择并训练
GBR_house = GradientBoostingRegressor().fit(house_train,house_target_train)
print('建立的梯度提升回归模型为:','\n',GBR_house)

# 模型的评价
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
print('california_housing数据梯度提升回归树模型的平均绝对误差为:',
     mean_absolute_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的均方误差为:',
     mean_squared_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的中值绝对误差为:',
     median_absolute_error(house_target_test,house_target_pred))
print('california_housing数据梯度提升回归树模型的可解释方差值为:',
     explained_variance_score(house_target_test,
        house_target_pred))
print('california_housing数据梯度提升回归树模型的R方值为:',
     r2_score(house_target_test,house_target_pred))

建立的梯度提升回归模型为: 
 GradientBoostingRegressor(alpha=0.9, criterion='friedman_mse', init=None,
                          learning_rate=0.1, loss='ls', max_depth=3,
                          max_features=None, max_leaf_nodes=None,
                          min_impurity_decrease=0.0, min_impurity_split=None,
                          min_samples_leaf=1, min_samples_split=2,
                          min_weight_fraction_leaf=0.0, n_estimators=100,
                          n_iter_no_change=None, presort='auto',
                          random_state=None, subsample=1.0, tol=0.0001,
                          validation_fraction=0.1, verbose=0, warm_start=False)
california_housing数据梯度提升回归树模型的平均绝对误差为: 38055.14120724933
california_housing数据梯度提升回归树模型的均方误差为: 3103158196.172548
california_housing数据梯度提升回归树模型的中值绝对误差为: 26179.478445698216
california_housing数据梯度提升回归树模型的可解释方差值为: 0.7619005663157657
california_housing数据梯度提升回归树模型的R方值为: 0.7618531003377986

总结

在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值