Линейная регрессия графика из списка DataFrames - PullRequest
1 голос
/ 15 марта 2019

Я пытаюсь построить линейную регрессию приведенных ниже данных и у меня возникли проблемы с функцией LinearRegression.fit() Склеарна, которая показывает эту ошибку: ValueError: Expected 2D array, got 1D array instead:.Я не уверен в том, как это сделать, и много исследовал на этом форуме, как построить регрессию и извлечь фрейм данных из списка для анализа и построения.Я пытался преобразовать в np.reshape и преобразовать в массив безрезультатно.Это даже не подходит (X, Y [0]).

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd 
from sklearn.linear_model import LinearRegression


colors = ['r','g','b','k', 'y', 'c', 'orange', 'm', 'darkviolet', 'lawngreen', 'firebrick']
dataset = pd.read_csv('data.csv', index_col=False)

# replace all instances of 'x' with blank
dataset = dataset.replace(to_replace='x', value='NaN') 

# get X, which is 1-10 in this case
X = dataset.iloc[:,0] 

# length of set X
lenX = float(len(X)) 

def get_Y(dataset, iterations):
    '''
    gets Y and the mean of each set of Y
    '''
    Y_list, Y_mean = [], []
    i = 1

    while i<(iterations+1): 
        Y = dataset.iloc[:,i]
        Y = pd.to_numeric(Y, errors='coerce') # change object dataframe to float64
        Y_list.append(Y) 
        Y_mean.append(Y.mean()) # get mean
        i += 1
    return Y_list, Y_mean

Y, Y_mean = get_Y(dataset, lenX)

# plotting all 10 lines
for i in range(len(X)):
    plt.plot(X, Y[i], colors[i])

#newY = np.reshape(Y,100)
#newX = np.reshape(X,10)

LinearRegression().fit(newX,newY)
#reg.score(X,Y)

plt.legend(loc='best')
plt.show()

Это в data.csv:

,1,2,3,4,5,6,7,8,9,10
1,3.5,3.4,3.0,3.6,3.5,3.1,3.2,3.5,3.0,3.5
2,2.9,2.6,2.9,2.7,2.5,2.6,2.9,3.1,2.6,3.0
3,2.3,2.5,2.3,2.0,2.7,2.7,2.4,2.5,2.8,2.3
4,2.1,2.4,2.3,2.4,2.6,2.1,2.0,2.6,2.2,2.2
5,2.2,1.9,2.0,2.3,2.1,2.0,2.1,1.8,1.9,1.8
6,1.9,2.0,2.1,2.2,1.8,2.3,2.2,1.8,2.1,1.7
7,1.9,2.1,2.1,2.3,1.9,2.3,2.1,2.0,2.2,2.0
8,x,2.2,2.1,2.3,1.9,2.3,2.1,2.9,x,2.1
9,x,1.9,x,2.2,x,2.2,1.9,x,x,1.8
10,x,1.9,x,2.1,x,x,2.1,x,x,2.0

Plot without regression.

...