sklearn: how to get coefficients of polynomial features

后端 未结 3 1838
予麋鹿
予麋鹿 2020-12-05 20:08

I know it is possible to obtain the polynomial features as numbers by using: polynomial_features.transform(X). According to the manual, for a degree of two the

相关标签:
3条回答
  • 2020-12-05 20:19

    By the way, there is more appropriate function now: PolynomialFeatures.get_feature_names.

    from sklearn.preprocessing import PolynomialFeatures
    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame.from_dict({
        'x': np.random.randint(low=1, high=10, size=5),
        'y': np.random.randint(low=-1, high=1, size=5),
    })
    
    p = PolynomialFeatures(degree=2).fit(data)
    print p.get_feature_names(data.columns)
    

    This will output as follows:

    ['1', 'x', 'y', 'x^2', 'x y', 'y^2']
    

    N.B. For some reason you gotta fit your PolynomialFeatures object before you will be able to use get_feature_names().

    If you are Pandas-lover (as I am), you can easily form DataFrame with all new features like this:

    features = DataFrame(p.transform(data), columns=p.get_feature_names(data.columns))
    print features
    

    Result will look like this:

         1    x    y   x^2  x y  y^2
    0  1.0  8.0 -1.0  64.0 -8.0  1.0
    1  1.0  9.0 -1.0  81.0 -9.0  1.0
    2  1.0  1.0  0.0  1.0   0.0  0.0
    3  1.0  6.0  0.0  36.0  0.0  0.0
    4  1.0  5.0 -1.0  25.0 -5.0  1.0
    
    0 讨论(0)
  • 2020-12-05 20:27
    import numpy as np
    from sklearn.preprocessing import PolynomialFeatures
    
    X = np.array([2,3])
    
    poly = PolynomialFeatures(3)
    Y = poly.fit_transform(X)
    print Y
    # prints [[ 1  2  3  4  6  9  8 12 18 27]]
    print poly.powers_
    

    This code will print:

    [[0 0]
     [1 0]
     [0 1]
     [2 0]
     [1 1]
     [0 2]
     [3 0]
     [2 1]
     [1 2]
     [0 3]]
    

    So if the i'th cell is (x,y), that means that Y[i]=(a**x)*(b**y). For instance, in the code example [2 1] equals to (2**2)*(3**1)=12.

    0 讨论(0)
  • 2020-12-05 20:27

    For a dataframe like this

    import pandas as pd
    import numpy as np
    from sklearn.preprocessing import PolynomialFeatures
    
    data = pd.DataFrame({
        'x': np.random.randint(low=1, high=10, size=5),
        'y': np.random.randint(low=-1, high=1, size=5)})
    

    Here's how I did it,

    PolyFeats = PolynomialFeatures(degree=2)
    dfPoly = pd.DataFrame(
        data=PolyFeats.fit_transform(data), 
        columns=PolyFeats.get_feature_names(data.columns))
    

    to get an output like this,

    In [50]: dfPoly
    Out[50]: 
         1    x    y   x^2  x y  y^2
    0  1.0  5.0  0.0  25.0  0.0  0.0
    1  1.0  6.0 -1.0  36.0 -6.0  1.0
    2  1.0  1.0 -1.0   1.0 -1.0  1.0
    3  1.0  5.0 -1.0  25.0 -5.0  1.0
    4  1.0  6.0  0.0  36.0  0.0  0.0
    
    0 讨论(0)
提交回复
热议问题