暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python中sklearn库

895

sklearn (scikit-learn) 是基于 Python 语言的机器学习工具

    1. 简单高效的数据挖掘和数据分析工具

    2. 可供大家在各种环境中重复使用

    3. 建立在 NumPy ,SciPy 和 matplotlib 上

    4. 开源,可商业使用 - BSD许可证


sklearn库的导图


1、数据预处理

    数据预处理就是通过对数据的一些转换,取特征,填充等等操作,使得数据组织形式、特征更加符合后续分类算法的要求!!需要一定的经验。

    import seaborn as sns
    #加载数据集
    iris = sns.load_dataset("iris")


    #数据清洗,筛去部分特征
    iris_simple = iris.drop(["sepal_length", "sepal_width"], axis=1)
    iris_simple.head()


    #标签编码,将字符串映射为整数
    from sklearn.preprocessing import LabelEncoder
    encoder = LabelEncoder()
    iris_simple["species"] = encoder.fit_transform(iris_simple["species"])


    #构建训练集和测试集合
    from sklearn.model_selection import train_test_split
    train_set, test_set = train_test_split(iris_simple, test_size=0.2)
    test_set.head()


    #分离训练集的特征和标签
    iris_x_train = train_set[["petal_length", "petal_width"]]
    iris_y_train = train_set["species"].copy()


    #分离测试集的特征和标签
    iris_x_test = test_set[["petal_length", "petal_width"]]
    iris_y_test = test_set["species"].copy()


    2、k近邻算法

    对某个点做预测,就是将距离该点最近的k个点取出来,并且将该点预测为取出的k个点中最多的那个类别。

      from sklearn.neighbors import KNeighborsClassifier


      #构建分类器对象,目的就是训练出这个对象
      clf = KNeighborsClassifier()


      #训练分类器对象
      clf.fit(iris_x_train, iris_y_train)


      #将训练好的分类器来预测测试集结果
      res = clf.predict(iris_x_test)
      print(res)
      print(iris_y_test.values)


      #评估结果
      accuracy = clf.score(iris_x_test, iris_y_test)
      print("预测正确率:{:.0%}".format(accuracy))


      #存储数据
      out = iris_x_test.copy()
      out["y"] = iris_y_test
      out["pre"] = res
      out.to_csv("iris_predict.csv")


      可视化结果

        import numpy as np
        import matplotlib as mpl
        import matplotlib.pyplot as plt


        def draw(clf):


        # 将数据特征网格化
        M, N = 500, 500
        x1_min, x2_min = iris_simple[["petal_length", "petal_width"]].min(axis=0)
        x1_max, x2_max = iris_simple[["petal_length", "petal_width"]].max(axis=0)
        t1 = np.linspace(x1_min, x1_max, M)
        t2 = np.linspace(x2_min, x2_max, N)
        x1, x2 = np.meshgrid(t1, t2)

        # 用分类器预测每一个网格
        x_show = np.stack((x1.flat, x2.flat), axis=1)
        y_predict = clf.predict(x_show)

        # 配色
        cm_light = mpl.colors.ListedColormap(["#A0FFA0", "#FFA0A0", "#A0A0FF"])
        cm_dark = mpl.colors.ListedColormap(["g", "r", "b"])

        # 绘制预测区域图
        plt.figure(figsize=(10, 6))
        plt.pcolormesh(t1, t2, y_predict.reshape(x1.shape), cmap=cm_light)

        # 绘制原始数据点
        plt.scatter(iris_simple["petal_length"], iris_simple["petal_width"], label=None,
        c=iris_simple["species"], cmap=cm_dark, marker='o', edgecolors='k')
        plt.xlabel("petal_length")
        plt.ylabel("petal_width")

        # 绘制图例
        color = ["g", "r", "b"]
        species = ["setosa", "virginica", "versicolor"]
        for i in range(3):
        plt.scatter([], [], c=color[i], s=40, label=species[i]) # 利用空点绘制图例
        plt.legend(loc="best")
        plt.title('iris_classfier')

        #调用函数
        draw(clf)


        3、朴素贝叶斯

        训练集中特征(x1,x2,x3)中出现了结果(y1,y2),如果y1出现的次数比y2多,那么就将特征(x1,x2,x3)预测为y1

          from sklearn.naive_bayes import GaussianNB
          #构建分类器对象,目的就是训练这个对象
          clf = GaussianNB()
          #训练
          clf.fit(iris_x_train, iris_y_train)
          #预测
          res = clf.predict(iris_x_test)
          print(res)
          print(iris_y_test.values)
          #评估结果
          accuracy = clf.score(iris_x_test, iris_y_test)
          print("预测正确率:{:.0%}".format(accuracy))
          可视化
          draw(clf)


          后续的分类算法的使用流程都和上述一致:

          1、从sklearn中导入对应的分类器

          2、构建分类器对象,我们的目标就是训练这个对象

          3、训练分类器对象

          4、利用这个训练好的对象预测结果

          5、评估结果

          6、可视化【可视化就是将数据特征进行网格化,如何用训练好的分类器去预测每一个网格的结果,如何再可视化展示】



          说明一下后面的算法思想:

          1、决策树:每次都是通过一个特征将数据尽可能分为纯净的两类数据,如果其中一类已经完全存,则完全纯净的类就结束划分,否则迭代下去继续划分。


          2、逻辑回归:

              训练:通过一个映射方式,将特征X=(x1, x2) 映射成 P(y=ck), 求使得所有概率之积最大化的映射方式里的参数。

              预测:计算p(y=ck) 取概率最大的那个类别作为预测对象的分类。


          3、支持向量积:以二分类为例,假设数据可用一个超平面将两类数据完全分开(这样的超平面很多),要求是求出每个类别最近点到平面的距离之积最大的那个平面。


          文章转载自梁霖编程工具库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论