山东大学Python(14)——Sklearn

#%%
# 使用 jupyter notebook 编写
"""
本章知识目录:
    1.Scikit-learn介绍
    2.Sklearn的基本功能
    3.监督学习
    4.无监督学习
    5.数据变换
    6.使用介绍
    7.机器学习主要步骤sklearn应用
    8.数据预处理
    9.结语
"""

"""
考试:
提供的功能6大部分:分类、回归等等(知道有哪些)
机器学习的主要步骤:采集、清理、学习、测试、预测、显示
数据预处理中的一些工作(任务):缺失值、标准化、连续值变为离散值
掌握的方法:标准化、规范化、缺失值插补、分类特征编码
区分概念并且还要知道这些方法的基本思想、为什么要这么做:
    Standardization标准化(scale、standardscale)
    归一化
    规范化和范数
    onehot编码(给一个例子,写出onehot编码形式)
    缺失值插补
给一个sklearn的代码,写出每一部分的功能
"""

#%%

"""
Scikit-learn介绍:
    SciPy是一个开源的基于Python的科学计算工具包。
    基于SciPy,目前开发者针对不同应用领域已经开发出众多的分支版本
    他们统一称为Scikits,即SciPy工具包的意思。
    在这些版本中专门面向机器学习的就是Scikit-learn

Sklearn的基本功能:
    六大功能:分类、回归、聚类、数据降维、模型选择、数据预处理
    1.分类
    2.回归
    3.聚类
    4.数据降维
    5.模型选择
    6.数据预处理
"""

#%%

"""
监督学习:
    1.
        neighbors:近邻算法
        svm:支持向量机
        kernel-ridge:核——岭回归
        discriminant_analysis:判别分析
        linear_model:广义线性模型
    2.
        ensemle:集成方法
        tree:决策树
        naive_bayes:朴素贝叶斯
        cross_decomposition:交叉分解
        gaussian_process:高斯过程
    3.
        neural_network:神经网络
        calibration:概率校准
        isotonic:保序回归
        feature_selection:特征选择
        multiclass:多类多标签算法
"""
# 以上的每个模块都包括多个算法,在调用时直接import即可,譬如:
from sklearn.svm import SVC 
svc = SVC()

#%%

"""
无监督学习:
    1.
        decomposition:矩阵因子分解
        cluster:聚类
        manifold:流形学习
        mixture:高斯混合模型
    2.
        neural_network:无监督神经网络
        density:密度估计
        covariance:协方差估计
"""

#%%

"""
数据变换:
    1.
        feature_extraction:特征抽取
        feature_selection:特征选择
        preprocess:预处理
    2.
        random_projection:随机投影
        kernel_approximation:核逼近
        pipline:管道流(这个严格说不算是数据变换模块)
"""

#%%

"""
使用介绍:
    在sklearn里面,我们可以使用完全一样的接口来实现不同的机器学习算法,
    通用的流程可以理解如下:
        数据加载和预处理
        定义分类器(回归器等等),譬如svc = svm.svc()
        用训练集对模型进行训练,只需调用fit方法,svc.fit(X_train, y_train)
        用训练好的模型进行预测:y_pred=svc.predict(X_test)
        对模型进行性能评估:svc.score(X_test, y_test)
"""

#%%

"""
机器学习主要步骤sklearn应用:
    1.数据集--导入sklearn数据集(学习用)
    2.创建数据集
"""

#%%

# 1.数据集--导入sklearn数据集(学习用)
# sklearn中包含了大量的优质的数据集,可用于学习。
# 要想使用sklearn中的数据集,必须导入datasets模块:
from sklearn import datasets
iris = datasets.load_iris()# 导入数据集 
X = iris.data # 获得其特征向量 
y = iris.target # 获得样本label

#%%

from sklearn import datasets
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt

#使用以后的数据集进行线性回归(这里是波士顿房价数据)
loaded_data=datasets.load_boston()
data_X=loaded_data.data
data_y=loaded_data.target

model=LinearRegression()
model.fit(data_X,data_y)

print(model.predict(data_X[:4,:]))
print(data_y[:4])

#使用生成线性回归的数据集,最后的数据集结果用散点图表示
X,y=datasets.make_regression(n_samples=100,n_features=1,n_targets=1,noise=10)   #n_samples表示样本数目,n_features特征的数目  n_tragets  noise噪音(高斯噪音标准差)
plt.scatter(X,y)
plt.show()


#%%

"""
2.创建数据集
    除了可以使用sklearn自带的数据集,还可以自己去创建训练样本
    sklearn中的samples generator包含的大量创建样本数据的方法:

分类问题的样本生成器:
    from sklearn.datasets.samples_generator import make_classification 
    X, y = make_classification(n_samles=6, n_features=5, n_informative=2, n_redundant=2, n_classes=2, n_clusters_per_class=p2, scale=1.0, random_state=20) 
    # n_samples:指定样本数 
    # n_features:指定特征数
    # n_classes:指定几分类 
    # n_redundant:冗余特征数
    # random_state:随机种子,使得随机状可重
    for x_,y_ in zip(X,y):
        print(y_,end=':')
        print(x_)

数据预处理:
    1.数据预处理阶段是机器学习中不可缺少的一环,
        它会使得数据更加有效的被模型或者评估器识别
    2.数据预处理包括:降维、数据归一化、特征提取和特征转换(one-hot)等,
        这在sklearn里面有很多方法
    3.from sklearn import preprocessing

数据归一化:
    为了使得训练数据的标准化规则与测试数据的标准化规则同步,
    preprocessing中提供了很多Scaler
    train_data = [[0, 0], [0, 0], [1, 1], [1, 1]] 
    # 1. 基于mean和std的标准化 
    scaler = preprocessing.StandardScaler().fit(train_data) scaler.transform(train_data) 
    scaler.transform(test_data) 
    # 2. 将每个特征值归一化到一个固定范围 
    scaler = preprocessing.MinMaxScaler(feature_range=(0, 1)).fit(train_data) scaler.transform(train_data) 
    scaler.transform(test_data) 
    #feature_range: 定义归一化范围,注用()括起来
"""
from sklearn import preprocessing #进行标准化数据时,需要引入包
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.datasets.samples_generator import  make_classification
from sklearn.svm import SVC
import matplotlib.pyplot as plt
X,y=make_classification(n_samples=300,n_features=2,n_redundant=0,n_informative=2,random_state=22,n_clusters_per_class=1,scale=100)
#X=preprocessing.minmax_scale(X,feature_range=(-1,1))
X=preprocessing.scale(X)
X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3)
clf=SVC()
clf.fit(X_train,y_train)
print(clf.score(X_test,y_test))
plt.scatter(X[:,0],X[:,1],c=y)
plt.show()
"""
数据集拆分:
    在得到训练数据集时,通常我们经常会把训练数据集进一步拆分成训练集和验证集,
    这样有助于我们模型参数的选取
    # 作用:将数据集划分为 训练集和测试集
    # 格式:train_test_split(*arrays, **options)
    from sklearn.mode_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
    #arrays:样本数组,包含特征向量和标签
    #test_size:
    #  float-获得多大比重的测试样本 (默认:0.25)
    #  int - 获得多少个测试样本
    train_size: 同test_size
    random_state:
      int - 随机种子(种子固定,实验可复现)
      
    shuffle - 是否在分割之前对数据进行洗牌(默认True)
    
    返回
    ---
    分割后的列表,长度=2*len(arrays), 
      (train-test split)

定义模型:
    sklearn为所有模型提供了非常相似的接口,
    这样使得我们可以更加快速的熟悉所有模型的用法。

保存模型:
    1.可以将我们训练好的model保存到本地,或者放到线上供用户使用
    2.保存为pickle文件
    3.sklearn自带方法joblib
    import pickle
    # 保存模型
    with open('model.pickle', 'wb') as f:
        pickle.dump(model, f)
    # 读取模型
    with open('model.pickle', 'rb') as f:
        model = pickle.load(f)
    model.predict(X_test)
===========================================   
    from sklearn.externals import joblib
    # 保存模型
    joblib.dump(model, 'model.pickle')
    #载入模型
    model = joblib.load('model.pickle')
===========================================
"""

#%%

"""
数据预处理:
    
"""
from sklearn.model_selection import train_test_split

#%%

"""
结语:
    剩下的结合考试内容看PPT吧
"""


发布了36 篇原创文章 · 获赞 20 · 访问量 2832

猜你喜欢

转载自blog.csdn.net/weixin_43360801/article/details/103404445