zoukankan      html  css  js  c++  java
  • python机器学习随笔

    1.scikit-learn数据集API介绍
    ·sklearn.datasets 加载获取流行数据集
    datasets.load_*() 获取小规模数据集,数据集包含在datasets里
    datasets.fetch_*() 获取大规模数据集,需要从网络上下载,函数的第一个参数是data_home,表示数据集下载的目录,
    默认~/scikit_learn_data/
    2.sklearn小数据集
    ·sklearn.datasets.load_iris() 加载并返回鸢尾花
    ·sklearn.datasets.load_boston()加载并返回波士顿房价数据集
    3.数据集的返回值
    ·datasets.base.Bunch(继承自字典)
    dict["key"] = values
    dict.key = values


    特征工程(Feature Engineering)
    sklearn 特征工程
    pandas数据清洗 ,数据处理

    #####特征抽取/特征提取#######

    特征提取API
    ·字典特征提取(特征离散化)
    ·文本特征提取
    ·图像特征提取
    sklearn.feature_extraction

    ·字典特征提取
    sklearn.feature_extraction.DictVectorizer(sparse=True)
    DictVectorizer.fit_transform(X) X:字典或者包含字典的迭代器返回值:返回sparse矩阵
    sparse表示稀疏矩阵
    将非零值 按位置表示出来
    节省内存 提高加载效率
    DictVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格式
    DictVectorizer.get_feature_names() 返回类别名称
    总结:对于特征当中存在类别信息我们都会做one-hot编码处理(不区分优先级)
    应用场景:
    1.pclass,sex 数据集当中特征值比较多
    DictVectorizer转换
    2.本身拿到的数据就是字典类型

    ·文本特征提取
    单词 作为 特征
    句子、短语、字母、单词都可以作为特征
    特征:特征词
    方法1:CountVectorizer(stop_words=[])
    stop_words停用词
    停用词表
    CountVectorizer.fit_transform(X) X:文本或者包含文本字符串的可迭代对象 返回值:返回sparse矩阵
    CountVectorizer.inverse_transform(X) X:array数组或者sparse矩阵 返回值:转换之前数据格
    CountVectorizer.get_feature_name() 返回值:单词列表
    关键词:在某一个类别的文章中,出现次数很多,但是在其他类别的文章当中出现很少
    方法2:TfidfVectorizer
    TF-IDF 重要程度
    两个词 “经济”,“非常”
    1000篇文章-语料库
    100篇文章-“非常”
    10篇文章-“经济”
    两篇文章
    文章A(100词):10次“经济”TF-IDF=0.2
    tf = 10/100 = 0.1 IDF=lg(1000/10)=2

    文章B(100词):10次“非常”TF-IDF=0.1
    tf = 10/100 = 0.1
    TF -词频(term frequency) IDF=lg(1000/100)=1
    IDF-逆向文档频率


    ####数据预处理#####
    无量纲化
    ·归一化:通过原始数据进行变换把数据映射到(默认为[0,1])之间
    ·sklearn.preprocessing.MinMaxScaler(feature_range=(0,1)...)
    MinMaxScalar.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features] 参数为 行 列
    ·标准化:通过对原始数据进行变换把数据变换到均值为0,标准差为1的范围内
    (x-mean)/std
    标准差:集中程度
    ·sklearn.preprocessing.StandardScaler()
    StandardScaler.fit_transform(X)
    ·降维 ndarray
    维数:嵌套的层数 0维-标量 1维-向量 2维-矩阵
    此处的降维:降低特征(随机变量)的个数
    效果:特征与特征之间不相关
    ·特征选择
    Filter过滤式
    方差选择发:低方差特征过滤 方差小:某个特征大多样本的值比较相近

    ·sklearn.feature_selection.VarianceThreshold(threshold = 0.0)
    ·删除所有低方差特征
    ·Variance.fit_transform(X)
    X:numpy array格式的数据[n_samples,n_features]
    返回值:训练集差异低于threshold的特征将被删除。默认值是保留所有
    非零方差特征。即删除所有相同的特征值

    相关系数-衡量特征与特征之间的相关程度
    皮尔逊相关系数
    Embeded嵌入式
    决策树
    正则化
    深度学习

    ·主成分分析:高维数据转化为低维数据的过程中可能会舍弃原有数据、创造新的变量
    是数据维度压缩,尽可能降低原数据的维度(复杂性),损失少量信息
    应用:回归分析或者聚类分析当中
    ·sklearn.decomposition.PCA(n_components=None)
    ·将数据分解为较低维度空间
    ·n_components:小数:表示保留百分之多少的信息
    整数;减少到多少特征 如二维n_components=2
    ·PCA.fit_transform(X) X:numpy array格式数据 [n_samples,n_features]
    ·返回值:转换后指定维度的array

    案例:探究用户对物品类别的喜好细分
    用户 物品类别
    user_id aisle_id
    见jupyter notebook

    from sklearn.datasets import load_iris
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import GridSearchCV
    
    def knn_iris():
        """
        用KNN算法对鸢尾花进行分类
        :return:
        """
        #1)获取数据
        iris = load_iris()
        #2)划分数据集
        x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)
    
        #3)特征工程:标准化
        transfer = StandardScaler()
        x_train= transfer.fit_transform(x_train)#训练集
    
        x_test = transfer.transform(x_test)
        #用训练集的标准差和平均值做标准化 transform的作用是根据找到的规则对数据进行转换
    
        #4)KNN算法预估器
        estimator = KNeighborsClassifier(n_neighbors=3)
        estimator.fit(x_train,y_train)
        #5)模型评估
        #方法1:直接比对真实值和预测值
        y_predict = estimator.predict(x_test)
        print("y_predict:
    ",y_predict)
        print("直接比对真实值和预测值:
    ",y_test == y_predict)
    
        #方法2:计算准确率
        score= estimator.score(x_test,y_test)
        print("准确率为:
    ",score)
        return None
    def knn_iris_gscv():
        """
        用KNN算法对鸢尾花进行分类,添加网格搜索和交叉验证
        :return:
        """
        #1)获取数据
        iris = load_iris()
        #2)划分数据集
        x_train,x_test,y_train,y_test = train_test_split(iris.data,iris.target,random_state=6)
    
        #3)特征工程:标准化
        transfer = StandardScaler()
        x_train= transfer.fit_transform(x_train)#训练集
    
        x_test = transfer.transform(x_test)
        #用训练集的标准差和平均值做标准化 transform的作用是根据找到的规则对数据进行转换
    
        #4)KNN算法预估器
        estimator = KNeighborsClassifier()
        #加入网格搜索与交叉验证
        #参数准备
        param_dict= {"n_neighbors":[1,3,5,7,9,11]}
        estimator  = GridSearchCV(estimator,param_grid=param_dict,cv = 10)
    
    
        estimator.fit(x_train,y_train)
        #5)模型评估
        #方法1:直接比对真实值和预测值
        y_predict = estimator.predict(x_test)
        print("y_predict:
    ",y_predict)
        print("直接比对真实值和预测值:
    ",y_test == y_predict)
    
        #方法2:计算准确率
        score= estimator.score(x_test,y_test)
        print("准确率为:
    ",score)
    
        # ·最佳参数:best_params_
        print("最佳参数:
    ",estimator.best_params_)
        # ·最佳结果:best_score_
        print("最佳结果:
    ",estimator.best_score_)
        # ·最佳估计器:best_estimator_
        print("最佳估计器:
    ",estimator.best_estimator_)
        # ·交叉验证结果:cv_results_
        print("交叉验证结果:
    ",estimator.cv_results_)
        return None
    if __name__ =="__main__":
        #代码1:用KNN算法对鸢尾花进行分类
        # knn_iris()
        knn_iris_gscv()

    jupyter notebook

    #1.获取数据
    #2.合并表
    #3.找到user_id和aisle之间的关系
    #4.PCA降维
    import pandas as pd
    
    order_products = pd.read_csv("./instacart/order_products_prior.csv")
    products = pd.read_csv("./instacart/products.csv")
    orders = pd.read_csv("./instacart/orders.csv")
    aisles = pd.read_csv("./instacart/aisles.csv")
    
    #2.合并表
    
    #合并aisles和products ,让aisle和product_id在一起
    tab1 = pd.merge(aisles,products,on=["aisle_id","aisle_id"])
    
    tab2 = pd.merge(tab1,order_products,on=["product_id","product_id"])
    
    tab3 = pd.merge(tab2,orders,on=["order_id","order_id"])
    
    #3.找到user_id和aisle之间的关系
    table = pd.crosstab[tab3["user_id"],tab3["aisle"]]
    
    #4.PCA降维
    from sklearn.decomposition import PCA
    
    #1.实例化一个转换器
    transfer = PCA(n_components = 0.95) #保存95%的信息
    
    #2.调用fit_transform
    data_new = transfer.fit_transform(data)
  • 相关阅读:
    利用web前端综合制作一个注册功能
    使用 kubeadm 快速部署一个 Kubernetes 集群
    部署一套完整的Kubernetes高可用集群(二进制,最新版v1.18)下
    ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'gitee.com...'
    fatal: unable to access 'https://gitee.com/...': Could not resolve host: gitee.com
    Qt学生管理系统
    Qt5.14.2生成qsqlmysql.lib
    express框架实现数据库CRUD操作
    链表常见的题型和解题思路
    2 引用
  • 原文地址:https://www.cnblogs.com/guyahan/p/10392328.html
Copyright © 2011-2022 走看看