精华内容
下载资源
问答
  • 解释下特征构建、特征抽取和特征选择: 1、当数据拿到手里后,首先需要从现有数据中挑选或将现有数据进行变形,组合形成新特征,此过程称为特征构建。 2、当特征维度比较高,通过映射或变化的方式,用低维空间样本来...

    解释下特征构建、特征抽取和特征选择:
    1、当数据拿到手里后,首先需要从现有数据中挑选或将现有数据进行变形,组合形成新特征,此过程称为特征构建。
    2、当特征维度比较高,通过映射或变化的方式,用低维空间样本来表示样本,称为特征抽取。
    3、从一组特征中挑选出一些最有效的特征,以达到降低维度和降低过拟合风险的目的,称为特征选择。


    机器学习,一些比赛竞赛中,通常会给一定的特征数据进行分类或者回归预测。有时需要构建更多的特征,然后对特征再进行特征选择。通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高维度和互相间关系的项。这在 PolynomialFeatures 中实现:

    >>> import numpy as np
    >>> from sklearn.preprocessing import PolynomialFeatures
    >>> X = np.arange(6).reshape(3, 2)
    >>> X                                                 
    array([[0, 1],
           [2, 3],
           [4, 5]])
    >>> poly = PolynomialFeatures(2)
    >>> poly.fit_transform(X)                             
    array([[  1.,   0.,   1.,   0.,   0.,   1.],
           [  1.,   2.,   3.,   4.,   6.,   9.],
           [  1.,   4.,   5.,  16.,  20.,  25.]])

    在一些情况下,只需要特征间的交互项,这可以通过设置 interaction_only=True 来得到:

    >>> X = np.arange(9).reshape(3, 3)
    >>> X                                                 
    array([[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]])
    >>> poly = PolynomialFeatures(degree=3, interaction_only=True)
    >>> poly.fit_transform(X)                             
    array([[   1.,    0.,    1.,    2.,    0.,    0.,    2.,    0.],
           [   1.,    3.,    4.,    5.,   12.,   15.,   20.,   60.],
           [   1.,    6.,    7.,    8.,   42.,   48.,   56.,  336.]])

    X的特征已经从(X_1,X_2,X_3)转为(1,X_1,X_2,X_3,X_1X_2,X_1X_3,X_2X_3,X_1X_2X_3)

    参考:https://blog.csdn.net/AuGuSt_81/article/details/79167563

    展开全文
  • 使用 scikit-learn提供的PolynomialFeatures 这个类可以进行特征的构造, 例如有两个特征a和b,由...degree:控制多项式的次数; interaction_only:默认为 False,如果指定为 True,那么就不会有特征本身和本身结合...

    使用 scikit-learn提供的PolynomialFeatures 这个类可以进行特征的构造, 例如有两个特征a和b,由这两个特征构造的特征项为[1, a, b, a2, a*b, b2]。

    PolynomialFeatures 这个类有 3 个参数:

    degree:控制多项式的次数;
    interaction_only:默认为 False,如果指定为 True,那么就不会有特征本身和本身结合的项,组合的特征中没有 a2 和 b2
    include_bias:默认为 True 。如果为 True 的话,那么结果中就会有 0 次幂项,即全为 1 这一列。

    下面通过几个例子进行说明:
    构造一个3*2维的特征值

    import numpy as np
    from sklearn.preprocessing import PolynomialFeatures
    
    X = np.arange(6).reshape(3, 2)
    X
    

    输出:

    array([[0, 1],
           [2, 3],
           [4, 5]])
    
    pf = PolynomialFeatures(2)
    pf.fit_transform(X)
    

    输出

    array([[ 1.,  0.,  1.,  0.,  0.,  1.],
           [ 1.,  2.,  3.,  4.,  6.,  9.],
           [ 1.,  4.,  5., 16., 20., 25.]])
    

    通过powers_属性可以看出上面的输出是怎么由这些特征组合的:

    pf.powers_
    

    输出:

    array([[0, 0],
           [1, 0],
           [0, 1],
           [2, 0],
           [1, 1],
           [0, 2]], dtype=int64)
    

    可以看到,pf.powers_输出的第一行是[0, 0],对应的是上面pf.fit_transform(X)的[1, 1, 1]这一列。意思是上面的3*2维特征的第一列的0次幂加上第二列的0次幂,剩下的以此类推。

    可以设置include_bias=False,这时就没有 0 次幂项(两个特征组合一起的0次幂没有,如a0*b0,但一个特征的0次幂是存在的,如a0*b1),即全为 1 这一列。

    pf = PolynomialFeatures(include_bias=False)
    pf.fit_transform(X)
    

    输出

    array([[ 0.,  1.,  0.,  0.,  1.],
           [ 2.,  3.,  4.,  6.,  9.],
           [ 4.,  5., 16., 20., 25.]])
    

    此时pf.powers_输出:

    array([[1, 0],
           [0, 1],
           [2, 0],
           [1, 1],
           [0, 2]], dtype=int64)
    

    官方文档:
    https://scikit-learn.org/stable/modules/preprocessing.html#preprocessing

    展开全文
  • 里德所罗门编码,于RS生成和生成多项式以及编码和综合症的一切-matlab开发
  • 在建立超过一次函数的线性回归模型之前,要对默认特征生成多项式特征再输入给模型 1 from sklearn.linear_model import LinearRegression 2 import numpy as np 3 import matplotlib.pyplot as plt 4 5 '...
    在做线性回归预测时候,为了提高模型的泛化能力,经常采用多次线性函数建立模型
    
    f = k*x + b   一次函数
    f = a*x^2 + b*x + w  二次函数
    f = a*x^3 + b*x^2 + c*x + w  三次函数等等
    
    泛化:
        对未训练过的数据样本进行预测。
        
    欠拟合:
        由于对训练样本的拟合程度不够,导致模型的泛化能力不足。
    
    过拟合:
        训练样本拟合非常好,并且学习到了不希望学习到的特征,导致模型的泛化能力不足。
        
    
    在建立超过一次函数的线性回归模型之前,要对默认特征生成多项式特征再输入给模型
     1 from sklearn.linear_model import LinearRegression
     2 import numpy as np
     3 import matplotlib.pyplot as plt
     4 
     5 '''
     6 在做线性回归预测时候,
     7 为了提高模型的泛化能力,经常采用多次线性函数建立模型
     8 
     9 f = k*x + b   一次函数
    10 f = a*x^2 + b*x + w  二次函数
    11 f = a*x^3 + b*x^2 + c*x + w  三次函数
    12
    13 
    14 泛化:
    15     对未训练过的数据样本进行预测。
    16     
    17 欠拟合:
    18     由于对训练样本的拟合程度不够,导致模型的泛化能力不足。
    19 
    20 过拟合:
    21     训练样本拟合非常好,并且学习到了不希望学习到的特征,导致模型的泛化能力不足。
    22     
    23 
    24 在建立超过一次函数的线性回归模型之前,要对默认特征生成多项式特征再输入给模型
    25 
    26 下面模拟 根据蛋糕的直径大小 预测蛋糕价格
    27 ''' 
    28 
    29 
    30 # 样本的训练数据,特征和目标值
    31 x_train = [[6], [8], [10], [14], [18]]
    32 y_train = [[7], [9], [13], [17.5], [18]]
    33 
    34 # 一次线性回归的学习与预测
    35 # 线性回归模型 学习
    36 regressor = LinearRegression()
    37 regressor.fit(x_train, y_train)
    38 # 画出一次线性回归的拟合曲线
    39 xx = np.linspace(0, 25, 100)   # 0到16均匀采集100个点做x轴
    40 xx = xx.reshape(xx.shape[0], 1)
    41 yy = regressor.predict(xx)  # 计算每个点对应的y
    42 plt.scatter(x_train, y_train)   # 画出训练数据的点
    43 plt1, = plt.plot(xx, yy, label="degree=1")
    44 plt.axis([0, 25, 0, 25])
    45 plt.xlabel("Diameter")
    46 plt.ylabel("Price")
    47 plt.legend(handles=[plt1])
    48 plt.show()

    一次线性函数拟合曲线的结果,是欠拟合的情况:

     

    展开全文
  • 项目背景 无论是对于什么数据都存在两个非常经典的问题:问题一是,数据与标签之间,数据与数据之间的一些实际关系很难搞清楚。有些时候特征A,特征B可能都与标签存在正向...那就是多项式特征生成与自动特征选择。 这

    项目背景

    无论是对于什么数据都存在两个非常经典的问题:问题一是,数据与标签之间,数据与数据之间的一些实际关系很难搞清楚。有些时候特征A,特征B可能都与标签存在正向关系。然而实际上的关系却可能是标签与特征A,B的乘积存在实际关系;问题二,在不同机器学习的模型中,特征的最佳选择往往并不一致。比如当模型选择为模型model1的时候,特征可能为特征ABC,而当模型变为model2的时候,最佳特征可能就变为了ACD。

    为了解决这两个问题,有一个比较成熟的自动化方案可供我们使用。那就是多项式特征生成与自动特征选择。

    这里我们借助sklearn中的多项式特征生成(sklearn.preprocessing.PolynomialFeatures)与RFECV(sklearn.feature_selection.RFECV,递归式特征消除)来解决这个问题。前者的作用是自动生成多项式特征,如,x1,x2,生成特征为x1**x1,x1*x2,x2**x2等。而递归式特征消除,则是一种利用模型进行特征消除的方法,需要模型本身带有特征的重要程度这一项,之后则不断地递归调用自身,将不重要的特征去除,直到去除某个特征后,模型的预测效果下降为止。

    技术栈

    • Python3
    • scikit-learn
    • pandas
    • numpy
    • matplotlib

    实现

    数据

    特征的自由组合有时会带来性能提升,但并不一定一定是有效的。更多的时候我们需要要考虑的是实际业务的需要。这里我们选择UCI的红酒质量数据集进行处理,从实际业务上来说,红酒质量数据集中的特征都是单项的红酒指标,但是实际上红酒的评分本就并非直接与单项数据成正比,有些则是与特征之间的组合或者特征的几次方成有效关系。因此我们这里就是用多项式特征生成与递归特征消除来自动获取符合实际业务的模型。

    该数据的下载可以前往:http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv

    代码

    首先加载有关类库

    import numpy as np
    from sklearn.feature_selection import RFECV
    from sklearn.linear_model import LassoCV
    from sklearn.metrics import mean_squared_error
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    

    之后创建数据加载的方法,并调用数据;要注意的是我们这里使用的train_test_split方法进行数据的分割,其中test_size=0.30,表示分割出百分之三十的数据作为测试数据集,随机数种子为random_state=531,为随机数种子赋值后我们将

    def GetDataByPandas():
        import pandas as pd
        wine = pd.read_csv("/home/fonttian/Data/dataset/wine/wine.csv")
        y = np.array(wine.quality)
        X = np.array(wine.drop("quality", axis=1))
        columns = np.array(wine.columns)
    
        return X, y, columns
    
    
    X, y, wineNames = GetDataByPandas()
    scalar = StandardScaler()
    X = scalar.fit_transform(X)
    
    train_data, test_data, train_labels, test_labels = train_test_split(X, y, test_size=0.30, random_state=531)
    

    之后首先使用多项式特征生成方法进行特征的自动生成,具体代码如下:

    from sklearn.preprocessing import PolynomialFeatures
    
    poly = PolynomialFeatures(2)
    print("原始数据的形状:")
    print(train_data.shape)
    train_data_new = poly.fit_transform(train_data)
    test_data_new = poly.fit_transform(test_data)
    print("生成多项式特征之后的数据形状:")
    print(train_data_new.shape)
    
    原始数据的形状:
    (1119, 11)
    生成多项式特征之后的数据形状:
    (1119, 78)
    

    此处参数2表示,特征生成的程度,如果需要生成3程度(也就是三次方和三个特征自由组合),只需要设置参数为3即可。另外还有一个参数interaction_only,表示是否只生成交互特征,如果为True,将不会生成特征与自身交互产生的特征(也就是几次方之类的),该参数默认为False。
    之后我们需要选择一个模型进行数据的预测,同时为了方便观察以及避免超参数带来的偶然性。我们这里选择LassoCV方法进行建模,该方法会使用交叉验证自动选择Lasso的最佳超参数alpha,这样可以很大程度避免默认超参数对实际结果的影响。具体代码如下:

    %matplotlib inline
    def LassoCV_plot(model):
        import matplotlib.pyplot as plot
        plot.figure()
        plot.plot(model.alphas_, model.mse_path_, ':')
        plot.plot(model.alphas_, model.mse_path_.mean(axis=-1),
                  label='Average MSE Across Folds', linewidth=2)
        plot.axvline(model.alpha_, linestyle='--',
                     label='CV Estimate of Best alpha')
        plot.semilogx()
        plot.legend()
        ax = plot.gca()
        ax.invert_xaxis()
        plot.xlabel('alpha')
        plot.ylabel('Mean Square Error')
        plot.axis('tight')
        plot.show()
    
        # print out the value of alpha that minimizes the Cv-error
        print("alpha Value that Minimizes CV Error  ", model.alpha_)
        print("Minimum MSE  ", min(model.mse_path_.mean(axis=-1)))
    
    
    # Call LassoCV from sklearn.linear_model
    lcv_1 = LassoCV(cv=10,n_jobs=-1)
    wineModel = lcv_1.fit(train_data, train_labels)
    LassoCV_plot(wineModel)
    lcv_2 = LassoCV(cv=10,n_jobs=-1)
    wineModel_new = lcv_2.fit(train_data_new, train_labels)
    LassoCV_plot(wineModel_new)
    
    estimator = LassoCV(cv=10,n_jobs=-1)
    selector = RFECV(estimator, step=1, cv=5,n_jobs=-1)
    selector = selector.fit(X, y)
    
    selector_train_data = selector.fit_transform(train_data, train_labels)
    test_data_selector = selector.transform(test_data)
    

    lassocv可视化

    alpha Value that Minimizes CV Error   0.005057237342969403
    Minimum MSE   0.42849753501285
    

    lassocv 可视化

    alpha Value that Minimizes CV Error   0.0061927974491236
    Minimum MSE   0.4236178162163108
    

    从最终结果来看,我们直接使用生成的67种特征+原11种特征进行建模的效果并不好于直接使用原11种特征,这是必然是因为产生了大量的无用特征的缘故。下一步我们就需要借助递归式特征消除进行特征选择,将真正有效的特征选择出来。

    print("使用特征选择,并进行效果对比:")
    
    estimator = LassoCV(cv=10,n_jobs=-1)
    selector = RFECV(estimator, step=1, cv=5,n_jobs=-1)
    selector = selector.fit(X, y)
    
    selector_train_data = selector.fit_transform(train_data, train_labels)
    test_data_selector = selector.transform(test_data)
    
    print("特征选择之后数据的shape:",selector_train_data.shape)
    wineModel = lcv_1.fit(selector_train_data, train_labels)
    print("alpha Value that Minimizes CV Error  ", wineModel.alpha_)
    print("Minimum MSE  ", min(wineModel.mse_path_.mean(axis=-1)))
    
    selector_train_data_new = selector.fit_transform(train_data_new, train_labels)
    test_data_new_selector = selector.transform(test_data_new)
    
    print("特征选择之后数据的shape:",selector_train_data_new.shape)
    wineModel_new = lcv_2.fit(selector_train_data_new, train_labels)
    print("alpha Value that Minimizes CV Error  ", wineModel_new.alpha_)
    print("Minimum MSE  ", min(wineModel_new.mse_path_.mean(axis=-1)))
    
    使用特征选择,并进行效果对比:
    特征选择之后数据的shape: (1119, 7)
    alpha Value that Minimizes CV Error   0.0008837665882418426
    Minimum MSE   0.427181140352486
    特征选择之后数据的shape: (1119, 38)
    alpha Value that Minimizes CV Error   0.00038256145886961614
    Minimum MSE   0.4002180554706169
    

    上面即是进行特征选择后的实际结果,可以很明显的看到,如果仅仅对原始数据进行特征选择,那么大概能够降低0.00413的平均误差以及0.001的最小MSE;但是在对生成的多项式特征进行特征选择之后,其结果则得到的极大的下降(0.00588,0.234)。而且各位重要的是进行特征选择后的多项式数据集的拟合结果已经明显高于原有数据集的拟合结果。但是除了拟合结果之外更好地应该是预测结果的变化,下面的代码则是预测结果的变化:

    # 输出预测值
    def show_prediction(model, X, y):
        prediction = model.predict(X)
    
        print("RMSE", np.sqrt(mean_squared_error(y, prediction)))
        print("MSE", mean_squared_error(y, prediction))
    
    
    show_prediction(lcv_1, test_data_selector, test_labels)
    show_prediction(lcv_2, test_data_new_selector, test_labels)
    
    RMSE 0.6440234501860966
    MSE 0.4147662043896037
    RMSE 0.6390612669439588
    MSE 0.40839930290801785
    

    总结

    从预测结果看,很明显经过多项式特征生成与递归特征消除的模型效果依旧要好于原有模型很多。同时更重要的地方在于,目前对于模型效果具有正面效果的数据很有可能是有意义的特殊特征组合。利用该方法我们也可以快速的获得一个可能有用特殊意义的特征组合的集合,并引导我们发现这些特殊特征组合的现实意义。

    展开全文
  • 使用matlab实现BCH码生成多项式和最小多项式的malab生成代码
  • 特征多项式生成M序列

    2013-11-21 18:27:34
    根据特征多项式得到对应的m序列,特征多项式的输入为matlab通用的多项式输入方式。返回一个m序列。
  • 函数说明: PolynomialFeatures(degree=2, interaction_only=False, include_bias=False) 参数说明:degree=2,表示多项式的变化维度为2,即^2, ...对数据进行多项式变化,将两个特征a, b如果是进行2多项式变化...
  • CRC8校验程序 /********************************************************************************************************* ** Function name: CountCrc ** Descriptions: CRC校验...生成多项式:X8 + X2 + X + 1
  • 伽罗瓦域(256) 生成指定纠错码字的生成多项式 (js)
  • CRC 算法生成多项式

    万次阅读 2019-09-19 14:00:43
    标准的CRC算法的生成多项式: 标准 生成多项式 16进制表示 CRC12 x^12 + x^11 + x^3 + x^2 + x + 1 0x80F CRC16 x^16 + x^15 + x...
  • CRC 生成多项式

    万次阅读 2016-08-01 11:33:50
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送...
  • 求解rs(255,239)译码生成多项式系数,输入命令: pkg load communications rsgenpoly(255,239,[],0) 结果如下: ans = GF(2^8) array. Primitive Polynomial = D^8+D^4+D^3+D^2+1 (decimal 285) Array ...
  • 针对线性反馈移位寄存器(LFSR)序列生成多项式的估计问题,提出了一种基于LFSR序列有限域傅里叶变换(GFFT)的估计方法。首先证明了LFSR序列GFFT的非零点与LFSR序列生成多项式的零点之间的对应关系,进而利用该性质...
  • - x 是(可选)要对生成的 Hermite 多项式函数进行评估的值。 有两种可能的输出: 1. 如果 x 被省略,则 h 是一个具有 (n+1) 个元素的数组,其中包含每个 Hermite 多项式项的系数。 例如,调用 h = hermite(3) 将...
  • CRC编码生成多项式对应的代码

    千次阅读 多人点赞 2019-03-21 11:21:38
    如题:代码10110011 对应的多项式为 X7+X5+X4+X+1; 解题思路: 1就是有,0就是没有。倒着开始看从1到x的n次方。比如x2+x,没有1,那么代码就是110;再比如x3+1,没有x2和x,即1001。 找了很多资料都没说到点上, ...
  • Rayleigh-Ritz 方法中使用正交多项式来找到自然频率。 在 Rayleigh-Ritz 方法中,多项式通过 Gram-Schmidt 过程的正交化导致数值稳定的过程、更高的收敛率和更高模式的精确解。
  • 这篇博客想作为构造多项式特征的一个笔记,构建多项式特征是常见的构建新特征的方法之一. 在统计模型当中被广泛用于探索复合变量对y的影响,在机器学习项目当中并不像统计模型那样频繁使用,但我们依然可以用来探索...
  • 原问题是: ...已知CRC的生成多项式为:10011,信息码为10110,则计算出的CRC校验码是() 分析: 这题需要用到模二除法运算。并且用信息码除多项式。 计算过程如下,得出校验码为1111。 ...
  • 生成多项式和交互特征。 生成一个新的特征矩阵,该矩阵由度小于或等于指定度的特征的所有多项式组合组成。例如,如果输入样本是二维且格式为[a,b],则2阶多项式特征为[1,a,b,a ^ 2,ab,b ^ 2]。 参量 属性 ...
  • n=7; k=4; p=cyclpoly(n,k,‘all’);...0 0 0 1 0 1 1,即多项式x3+x+1 不难验证其他的元都是以它为生成元的理想的元素 注意到111010=1011110,100111=1011101 任何元都是1011的倍数。110001=1011*111
  • 再建立高次函数时候,要利用多项式特征生成生成训练数据。下面把整个流程展示一下模拟了一个预测蛋糕价格的从欠拟合到过拟合的过程git: https://github.com/linyi0604/MachineLearning在做线性回归...
  • 生成数据并给数据分类。。第一次看到这个技巧 #生成数据 np.random.seed(666) X = np.random.normal(0,1,size = (200,2)) y = np.array(X[:,0] ** 2 + X[:,1] ** 2 < 1.5, dtype='int')#给数据加上标签了。。 ...
  • CRC 生成多项式

    千次阅读 2014-03-31 19:12:54
    在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息...
  • 书上说是求x^n+1的n-k次因式,到底代码怎么写啊,求各位大佬顺手救救孩子吧,谢谢各位了!
  • CRC生成多项式应该怎样定

    千次阅读 2015-05-29 17:17:09
    http://wenku.baidu.com/link?url=hZh03ND4ZSj0cSpYwHcbkXga9JbOwhPrcu3QnKnYK5xD8G2NP4qrk47-BApEhtlgeHW7mLozMJMtErYkgorqmHZgWfsxtP5imZDrknGb1e3 ...
  • 标准多项式不用于使其更灵活。 用户提供数据流和生成多项式
  • 后期更新:matlab中产生m序列最简单的方法是调用idinput()函数,关于idinput()的具体用法可以在matlab中查看说明,这里举两个简单的例子: ...m序列的基本生成原理这里就不做介绍了,今天闲着没事时...
  • 最简单基础的方法是生成多项式轨迹 初始条件与终止条件的数目决定了我们的多项式最高次项。 假设我们在[0,tft_ftf​]时间段内规划路径,对于初始和终止的位置,速度和加速度都有一定的要求,相当于我们有6个约束条件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 35,698
精华内容 14,279
关键字:

生成多项式特征