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(