from regression_utils import generate_nonlinear_synthetic_data_regression, generate_nonlinear_synthetic_sine_data_regression, generate_linear_synthetic_data_regression, \
    plot_model_2d_regression, plot_model_3d_regression, plot_data_2d_regression, plot_data_3d_regression, \
    grid_search_plot_models_regression, plot_coefficients_regression, \
    plot_target_and_transformed_target_regression, rmse, regression_performance
from feature_reduction_utils import feature_reduction_linear_pca, feature_reduction_kernel_pca, \
    feature_reduction_tsne, feature_reduction_isomap
from kernel_utils import GaussianFeatures, KernelTransformer
from sklearn.model_selection import train_test_split
from sklearn import metrics, decomposition, manifold
from sklearn import tree, covariance, linear_model, ensemble, neighbors, svm, model_selection, feature_selection
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

X, y = generate_linear_synthetic_data_classification(n_samples=1000, n_features=3, n_redundant=0, n_classes=3, weights=[.3,.3,.4])
plot_data_3d(X)
X_lpca = feature_reduction_linear_pca(X, 2)
plot_data_2d(X_lpca, new_window=True)
X_kpca = feature_reduction_kernel_pca(X, 2)
plot_data_2d(X_kpca, new_window=True)
X_tsne = feature_reduction_tsne(X, 2)
plot_data_2d(X_tsne, new_window=True)
X_isomap = feature_reduction_isomap(X, 2)
plot_data_2d(X_isomap, new_window=True)

X, y = generate_nonlinear_synthetic_data_classification2(n_samples=1000)
plot_data_2d(X)
X_lpca = feature_reduction_linear_pca(X, 2)
plot_data_2d(X_lpca, new_window=True)
X_kpca = feature_reduction_kernel_pca(X, 2, 'rbf', 15)
plot_data_2d(X_kpca, new_window=True)
import sys
path = 'J:/utils'
sys.path.append(path)
import common_utils as utils
import tsne_utils as tutils
import classification_utils as cutils
import clustering_utils as cl_utils
import pandas as pd

#tsne effect on non-linearly related data
X, y = cutils.generate_nonlinear_synthetic_data_classification2(n_samples=1000)
X = pd.DataFrame(X, columns=['X1', 'X2'])
utils.plot_data_2d(X)
tutils.plot_tsne_result(X, y, 2)

#tsne effect on clustered data
X, y = cl_utils.generate_synthetic_data_3d_clusters(1000, 7, 0.01)
X = pd.DataFrame(X, columns=['X1', 'X2', 'X3'])
utils.plot_data_3d(X)
tutils.plot_tsne_result(X, y, 2)

#tsne effect on linearly related data(2 redundant featues)
X, y = cutils.generate_linear_synthetic_data_classification(n_samples=1000, n_features=3, n_redundant=2, n_classes=2, weights=[.5,.5])
X = pd.DataFrame(X, columns=['X1', 'X2', 'X3'])
utils.plot_data_3d(X)
tutils.plot_tsne_result(X, y, 2)