在温度和应变数据上运行PCA

时间:2018-09-12 13:23:21

标签: python pca

在温度和应变数据上应用PCA时出现以下错误。

T1是温度,W_A1是应变数据。两者的长度均为6000。

我使用panada数据框从excel获取温度数据,而使用pd数据框从excel获取应变数据。

数据是应变温度的2D。我真的不知道那个错误是怎么回事。

错误是

ValueError:n_components = 2必须在0到n_features = 1之间,且svd_solver ='full'

# Import the libraries
    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd

    # Import Data
    print("process data")
    T1 = temperature['T1'].tolist()
    W_A1 = strain[0]
    N = len(T1)

    xData = T1
    yData = W_A1
    xData = np.reshape(xData, (N, 1))
    yData = np.reshape(yData, (N, 1))
    # Split into the Training set and Test set
    from sklearn.model_selection import train_test_split
    Xtrain, Xtest, ytrain, ytest = train_test_split(xData, yData, test_size=0.2)

    # Feature Scaling
    from sklearn.preprocessing import StandardScaler
    sc = StandardScaler()
    Xtrain = sc.fit_transform(Xtrain)
    Xtest = sc.transform(Xtest)

    # Applying PCA
    from sklearn.decomposition import PCA
    pca = PCA(n_components=2)
    Xtrain = pca.fit_transform(Xtrain)
    Xtest = pca.transform(Xtest)
    explained_variance = pca.explained_variance_ratio_

    # Train Regression Model with PCA
    from sklearn.linear_model import LogisticRegression
    classifier = LogisticRegression(random_state=0)
    classifier.fit(Xtrain, ytrain)

    # Predict Results from PCA Model
    ypred = classifier.predict(Xtest)

    # Create Confusion Matrix
    from sklearn.metrics import confusion_matrix
    cm = confusion_matrix(ytest, ypred)

    # Visual the Training results
    from matplotlib.colors import ListedColormap
    X_set, y_set = Xtrain, ytrain
    X1, X2 = np.meshgrid(np.arange(start=X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
    np.arange(start=X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
    plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
                 alpha=0.75, cmap=ListedColormap(('red', 'green', 'blue')))
    plt.xlim(X1.min(), X1.max())
    plt.ylim(X2.min(), X2.max())
    for i, j in enumerate(np.unique(y_set)):
        plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                    c=ListedColormap(('red', 'green', 'blue'))(i), label=j)
    plt.title('LogisticRegression(Trainingset')
    plt.xlabel('PC1')
    plt.ylabel('PC2')
    plt.legend()
    plt.show()

    # Visual the Test set results
    from matplotlib.colors import ListedColormap
    X_set, y_set = Xtest, ytest
    X1, X2 = np.meshgrid(np.arange(start=X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
    np.arange(start=X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
    plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
                 alpha=0.75, cmap=ListedColormap(('red', 'green', 'blue')))
    plt.xlim(X1.min(), X1.max())
    plt.ylim(X2.min(), X2.max())
    for i, j in enumerate(np.unique(y_set)):
        plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                    c=ListedColormap(('red', 'green', 'blue'))(i), label=j)
    plt.title('LogisticRegression(Testset)')
    plt.xlabel('PC1')
    plt.ylabel('PC2')
    plt.legend()
    plt.show()

    # Visual the Test set results
    from matplotlib.colors import ListedColormap
    Xset, y_set = Xtest, ytest
    X1, X2 = np.meshgrid(np.arange(start=X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
    np.arange(start=X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
    plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
                 alpha=0.75, cmap=ListedColormap(('red', 'green', 'blue')))
    plt.xlim(X1.min(), X1.max())
    plt.ylim(X2.min(), X2.max())
    for i, j in enumerate(np.unique(y_set)):
        plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                    c=ListedColormap(('red', 'green', 'blue'))(i), label=j)
    plt.title('Regression(Testset)')
    plt.xlabel('PC1')
    plt.ylabel('PC2')
    plt.legend()
    plt.show()

    print(ypred)

0 个答案:

没有答案