示例#1
0
def knn_smooth(data):
    """
    func: 对欧式距离进行knn平滑(使用scikit-fda库进行平滑计算)
    param: data: 欧式距离列表 - list
    return: score: 平滑之后的得分
    """
    smoothing_parameter = int(len(data) / 2)
    fd = FDataGrid(sample_points=data,
                   data_matrix=[[i for i in range(1,
                                                  len(data) + 1)]])
    knn = ks.KNeighborsSmoother(smoothing_parameter=smoothing_parameter)
    fd_smoothed = knn.fit_transform(fd)

    return [i[0] for i in fd_smoothed.data_matrix.round(2)[0]]
def smooth_datagrid(fd):
    '''
    Smoothes the values in the datagrid object

    Args:
        fd (datagrid): Includes data_matrix, x vector for contionous data
        representation.

    Returns:
        knn_fd (datagrid): datagrid values smoothed with an kN Kernel.

    '''
    # smooth the values with kNeighbors kernel
    param_values = np.linspace(start=2, stop=25, num=24)
    knn = val.SmoothingParameterSearch(ks.KNeighborsSmoother(), param_values)
    knn.fit(fd)
    knn_fd = knn.transform(fd)

    return knn_fd
param_values_others = param_values_knn / 32

# Local linear regression kernel smoothing.
llr = val.SmoothingParameterSearch(ks.LocalLinearRegressionSmoother(),
                                   param_values_others)
llr.fit(fd)
llr_fd = llr.transform(fd)

# Nadaraya-Watson kernel smoothing.
nw = val.SmoothingParameterSearch(ks.NadarayaWatsonSmoother(),
                                  param_values_others)
nw.fit(fd)
nw_fd = nw.transform(fd)

# K-nearest neighbours kernel smoothing.
knn = val.SmoothingParameterSearch(ks.KNeighborsSmoother(), param_values_knn)
knn.fit(fd)
knn_fd = knn.transform(fd)

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(param_values_knn,
        knn.cv_results_['mean_test_score'],
        label='k-nearest neighbors')
ax.plot(param_values_knn,
        llr.cv_results_['mean_test_score'],
        label='local linear regression')
ax.plot(param_values_knn,
        nw.cv_results_['mean_test_score'],
        label='Nadaraya-Watson')
ax.legend()
dataset = skfda.datasets.fetch_phoneme()
fd = dataset['data'][:300]

fd[0:5].plot()
plt.show()

n_neighbors = np.arange(1, 24)

scale_factor = ((fd.domain_range[0][1] - fd.domain_range[0][0]) /
                len(fd.grid_points[0]))

bandwidth = n_neighbors * scale_factor

# K-nearest neighbours kernel smoothing.
knn = val.SmoothingParameterSearch(
    ks.KNeighborsSmoother(),
    n_neighbors,
)
knn.fit(fd)
knn_fd = knn.transform(fd)

# Local linear regression kernel smoothing.
llr = val.SmoothingParameterSearch(
    ks.LocalLinearRegressionSmoother(),
    bandwidth,
)
llr.fit(fd)
llr_fd = llr.transform(fd)

# Nadaraya-Watson kernel smoothing.
nw = val.SmoothingParameterSearch(