zoukankan      html  css  js  c++  java
  • 2020-5-1学习记录

    1.sklearn 分层抽样 StratifiedShuffleSplit

    https://blog.csdn.net/m0_38061927/article/details/76180541 这个给的例子还不错

    from sklearn.model_selection import StratifiedShuffleSplit
    import numpy as np
    X = np.array([[1, 2], [3, 4], [1, 2], [3, 4],
                  [1, 2],[3, 4], [1, 2], [3, 4]])#训练数据集8*2
    y = np.array([0, 0, 1, 1,0,0,1,1])#类别数据集8*1
    
    ss=StratifiedShuffleSplit(n_splits=1,test_size=0.25,train_size=0.75,random_state=0)#分成5组,测试比例为0.25,训练比例是0.75
    
    for train_index, test_index in ss.split(X, y):#这里调用split分割
       print("TRAIN:", train_index, "TEST:", test_index)#获得索引值
       X_train, X_test = X[train_index], X[test_index]#训练集对应的值
       y_train, y_test = y[train_index], y[test_index]#类别集对应的值
    #输出:
    TRAIN: [5 2 6 4 1 3] TEST: [7 0]

    n_splits控制分成几份train/test对,也可以多次生成就可以发现,train中正例和负例数目是相等的。

    其实这个函数很好理解啦,不必要花费太多的时间。

    2.pandas的scatter_matrix散点矩阵

    https://pandas.pydata.org/docs/reference/api/pandas.plotting.scatter_matrix.html

    df = pd.DataFrame(np.random.randn(1000, 4), columns=['A','B','C','D'])#对角线是特征直方图,其他的是散点图
    scatter_matrix(df, alpha=0.2)#alpha是透明度参数

    其实可以发现散点图是那种反对称的。

    3.从数据框中删除行或列

    这个需要知道行的索引标签或者列的标签:

    import pandas as pd
    
    df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
    df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])
    
    df = df.append(df2)
    
    # Drop rows with label 0
    df = df.drop('a',axis=1)
    
    print(df)
    #输出:删除列
       b
    0  2
    1  4
    0  6
    1  8
    
    df = df.drop(0,axis=0)
    #输出:删除行:行为0的
       a  b
    1  3  4
    1  7  8

    也学到了。drop是会返回副本的,不影响原来的数据框对象。

    这里的axis和numpy中的一样,0表示行,1表示列。

    4.sklearn中的impute方法

    插补方法。

    https://stackoverflow.com/questions/50843757/getting-modulenotfounderror-no-module-named-sklearn-impute-despite-having-l

    import的时候遇到了找不到模块的问题,原来是版本问题,0.19的sklearn中是没有这个插补方法的。

    所以选择升级,现在它已经有0.22版本的包了。

    ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。

    https://blog.csdn.net/jacke121/article/details/86747921

    pip install --user --upgrade scikit-learn

    加个--user就可以了。

    import numpy as np
    from sklearn.impute import SimpleImputer
    imp_mean = SimpleImputer(missing_values=np.nan, strategy='mean')
    #imp_mean.fit([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]])
    print(imp_mean.fit_transform([[7, 2, 3], [4, np.nan, 6], [10, 5, 9]]))
    
    X = [[np.nan, 2, 3], [4, np.nan, 6], [10, np.nan, 9]]
    print(imp_mean.fit_transform(X))
    
    #输出
    [[ 7.   2.   3. ]
     [ 4.   3.5  6. ]
     [10.   5.   9. ]]
    [[ 7.  2.  3.]
     [ 4.  2.  6.]
     [10.  2.  9.]]

    其实原来给的样例代码是,先fit一个,然后再transformX,其实我就不太明白,为什么不用自身去transform自身呢,所以我就改了一下。

    https://scikit-learn.org/stable/modules/generated/sklearn.impute.SimpleImputer.html

    可以看到这里的策略有四种:均值、中位数、众数、指定常数。

    5.np.r_ np.c_

    import numpy as np
    a = np.array([[1, 2, 3],[7,8,9]])
    
    b=np.array([[4,5,6],[1,2,3]])
    print(np.c_[a,b])
    print(np.r_[a,b])
    #输出:

    [[1 2 3 4 5 6]
    [7 8 9 1 2 3]]
    [[1 2 3]
    [7 8 9]
    [4 5 6]
    [1 2 3]]

    分别是按行连接,要求列数相同;按列连接,则要求行数相同。

    6.特征缩放

    scikit-learn中常用缩放:

    最小-最大缩放(又叫作归一化) :x-min/(max-min),这样就缩放到了[0,1]之间,就会有一个范围,对应MinMaxScaler 。

    标准化:x-mean/方差,也就是说标准化之后的均值都为0,这样没有缩放到固定的范围,对应StandadScaler

    归一化受异常值影响大。

    https://www.jianshu.com/p/516f009c0875 明日待看。

  • 相关阅读:
    我的第二个裸板程序之链接地址与存储地址
    ARM你必须知道的事儿——为啥“PC = PC + 8”?
    typedef你真的理解么?
    centos使用--vsftpd配置
    centos使用--zsh
    laravel5.2总结--序列化
    laravel5.2总结--csrf保护
    laravel5.2总结--任务调度
    laravel5.2总结--本地化以及常量的使用
    laravel5.2总结--文件上传
  • 原文地址:https://www.cnblogs.com/BlueBlueSea/p/12814925.html
Copyright © 2011-2022 走看看