• 白话 sklearn 模块


    0. 流程

    1. 实例化使用的模型类,得到一个模型对象
    2. 对象.fit(feature, target), 训练模型
    3. 对象.predict(data),得到预测的target

    1. 城市气候与海洋的关系研究

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from pandas import Series,DataFrame
    from pylab import mpl
    mpl.rcParams['font.sans-serif'] = ['FangSong'] 			# 指定默认字体
    mpl.rcParams['axes.unicode_minus'] = False 				# 解决保存图像是负号'-'显示为方块的问题
    # 同一城市的数据进行级联
    pd.concat([df1, df2, df3], ignore_index=True)
    plt.scatter(li1, li2)
    plt.xlabel = 'distance'
    plt.ylabel = 'temperature'
    plt.title = 'dis-temp'
    

    2. sklearn模块

    • Anaconda 中集成
    • 线性模型
    • 树模型

    1. 概念

    1. 人工智能和机器学习之间的关系
      • 机器学习是实现人工智能的一种技术手段
    2. 算法模型
      1. 概念:特殊对象该对象内部封装了某种还没有求出解的方程
      2. 作用:实现预测或分类
      3. 对象内部封装的方程的解就是算法模型预测或分类的结果
      4. 分类
        • 有监督学习:如果算法模型对象需要的样本数据必须有特征数据和目标数据
        • 无监督学习:只需要特征数据即可
    3. 样本数据
      1. 训练模型:样本数据和算法模型之间的关系(需要将样本数据带入到模型对象中,让模型对象的方程求出解)
      2. 算法模型的样本数据:千亿级别的样本数据
      3. 样本数据:由特征数据(自变量,往往是由多种特征组成)和目标数据(因变量)组成

    2. 线性回归算法模型(预测)

    # 建立一个温度模型,让其可以根据距离,预测出该距离对应城市的最高温度
    # 导入sklearn,建立线性回归模型
    from sklearn.linear_model import LinearRegression
    # 实例化算法模型对象, y = kx + b
    linear = LinearRegression()
    
    # 样本数据提取,一般封装到 np的 array 中
    feature = np.array(distance)
    target = np.array(max_temp)
    # 训练模型,特征数据必须是二维的
    linear.fit(feature.reshape(-1,1), target)
    # 基于训练好的模型对象实现预测功能(获取方程解)
    linear.predict([[266],[333]])
    
    x = np.linspace(0, 400, num=100)
    y = linear.predict(x.reshape[-1,-1])
    plt.scatter(distance, max_temp)
    plt.scatter(x, y)
    

    3. KNN(分类算法模型)

    1. k-近邻算法原理

    • 俗称:k近邻、K:数值,N:nearest,N:neighbor
    • 欧几里德距离:Euclidean Distance
    • 简单地说,K-近邻算法采用测量不同特征值之间的距离方法进行分类。
      1. 优点:精度高、对异常值不敏感、无数据输入假定。
      2. 缺点:时间复杂度高、空间复杂度高。
      3. 适用数据范围:数值型和标称型。

    2. 工作原理

    • 存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据 与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们 只选择样本数据集中前K个最相似的数据,这就是K-近邻算法中K的出处,通常K是不大于20的整数。 最后 ,选择K个最相似数据中出现次数最多的分类,作为新数据的分类。
    • 使用K-近邻算法分类爱情片和动作片。有人曾经统计过很多电影的打斗镜头和接吻镜头,假如有一部未看过的电影,如何确定它是爱情片还是动作片呢?我们可以使用K-近邻算法来解决这个问题。

    3. 在scikit-learn库中使用k-近邻算法

    • 分类问题:from sklearn.neighbors import KNeighborsClassifier
    • 回归问题:from sklearn.neighbors import KNeighborsRegressor
    # scikit-learn库库中使用k-近邻算法
    df = pd.read_csv('./film.txt')
    feature = df[['Action lens'],['Love lens']]
    target = df['target']
    # 导入模型
    from sklearn.neighbors import KNeighborsClassifier
    knn = KNeighborsClassifier(n_neighbors=3)
    knn.fit(feature, target)
    # knn模型训练打分结果
    knn.score(feature, target)
    knn.predict([[30], [50]])
    

    4. sklearn提供的数据

    • 提供机器学习的测试数据
    # 提供机器学习的测试数据
    from sk-learn.datasets as datasets
    datasets.load_iris()
    
    # 训练数据
    x_train = feature[0:32500]
    y_train = target[0:32500]
    # 测试数据,测试模型的精准度
    x_test = feature[32500:]
    y_test = target[32500:]
    # 实例化模型
    knn = KNeighborsClassifier(n_neighbors=30)
    knn.fit(x_train, y_train)
    knn.score(x_train, y_train)
    # 测试模型精准度
    print(knn.predict(x_test), y_test)
    

    3. 手写数据识别(示例)

    1. 图片数据是二维的,放入list中,在转换为 array 时,就会变成三维数组
    • 先把把图片数组转换为一维数组即可
    1. 样本数据的训练数据必须是二维的
    • 降维操作:df.mean(axis=2) axis表示去掉哪一维数据
    1. 图片的像素压缩

      • import scipy.ndimage as ndimages

      • ndimages(df, zoom=(目标像素/当前图片像素,目标像素/当前图片像素))

      • df.reshape((1, -1)):转换为 1 * n 的数组

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    from sklearing.neighbors import KNeighborsClassifier
    
    # 1.提取样本数据
    feature = []
    target = []
    for i in range(10):
        for j in range(1, 501):
            img_path = f'./data/{i}/{i}_{j}.bmp'
            img_arr = plt.imread(img_path)
            feature.append(img_arr)
            target.append(i)
    
    # 2.将list类型样本转为 array 形式
    feature = np.array(feature)
    target = np.array(target)
    
    # 3.特征数据是三维的,不可作为训练数组,必须转换成二维数组
    feature = feature.reshape((5000, 784))
    # 只能固定一个随机函数的随机因子
    np.random.seed(10)
    np.random.shuffle(feature)
    np.random.seed(10)
    np.random.shuffle(feature)
    # 训练数据和测试数据
    x_train = feature[:4980]
    y_train = target[:4980]
    x_test = feature[4980:]
    y_test = target[4980:]
    # 4.生成训练模型
    knn = KNeighborsClassfier(n_negihbors=17)
    knn.fit(x_train, y_train)
    knn.score(x_train, y_train)
    
    print(knn.predict(x_test))
    print(y_test)
    
    # 5.将训练好的模型进行保存
    from sklearn.externals import joblib
    joblib.dump(knn, './knn.m')
    # 加载保存的模型
    knn = joblib.load('./knn.m')
    
    # 6.让模型对外部一张图片进行识别(应用)
    ex_img = plt.imread('./test.jpg')
    # 将多个数字进行裁剪
    img_two = ex_img[:70,130:185,:]
    # 外部图片数据是三维,实现降维
    img_two = img_two.mean(axis=2)
    # 像素调整,等比例压缩
    import scipy.ndimage as ndimages
    img_two = ndimage.zoom(img_two, zoom=(28/75, 28/55))
    # 将图片转换为一维数组
    img_two = img_two.reshape((1, -1))
    knn.predict(img_two)
    
  • 相关阅读:
    python
    突然萌发关于 redis 的想法(1)
    Liunx
    Git
    说一下数据库查询 和 分页问题的解决
    易忘点
    python
    python
    python
    python
  • 原文地址:https://www.cnblogs.com/henryw/p/11574482.html
Copyright © 2020-2023  润新知