2016-06-06 8 views
0

Ich habe einen Datensatz wie diesereinfache Vorhersage unter Verwendung von Pearson-Korrelation und lineare Regression mit Python

Value Month  Year 

    103.4 April  2006 
    270.6 August  2006 
    51.9 December 2006 
    156.9 February 2006 
    126.9 January  2006 
    96.8 July  2006 
    183.1 June  2006 
    266.6 March  2006 
    193.1 May   2006 
    524.7 November 2006 
    619.9 October  2006 
    129  September 2006 
    374.1 April  2007 
    260.5 August  2007 
    119.6 December 2007 
    9.9  February 2007 
    91.1 January  2007 
    106.6 July  2007 
    79.9 June  2007 
    60.5 March  2007 
    432.4 May   2007 
    128.8 November 2007 
    292.1 October  2007 
    129.3 September 2007 

Wert ist die jährliche Niederschlagsmenge für einen Bezirk. können wir es Distrikt nennen. Ich habe die Daten von 2006 bis 2014 und ich muss den Niederschlag für die nächsten 2 Jahre für DistriktA vorhersagen. Ich wähle Pearson-Korrelation und lineare Regression aus der Sklearn-Bibliothek, um die Daten vorherzusagen. Ich bin sehr verwirrt, und ich weiß nicht, wie X und Y ‚m neu in Python zu setzen, so dass jede Hilfe valuable.Thank ist man

ps .. Ich fand einen Code wie diese

import matplotlib.pyplot as plt 
import numpy as np 
from sklearn import datasets, linear_model 

# Load the diabetes dataset 
diabetes = datasets.load_diabetes() 


# Use only one feature 
diabetes_X = diabetes.data[:, np.newaxis, 2] 

# Split the data into training/testing sets 
diabetes_X_train = diabetes_X[:-20] 
diabetes_X_test = diabetes_X[-20:] 

# Split the targets into training/testing sets 
diabetes_y_train = diabetes.target[:-20] 
diabetes_y_test = diabetes.target[-20:] 

# Create linear regression object 
regr = linear_model.LinearRegression() 

# Train the model using the training sets 
regr.fit(diabetes_X_train, diabetes_y_train) 

# The coefficients 
print('Coefficients: \n', regr.coef_) 
# The mean square error 
print("Residual sum of squares: %.2f" 
     % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) 
# Explained variance score: 1 is perfect prediction 
print('Variance score: %.2f' % regr.score(diabetes_X_test, diabetes_y_test)) 

# Plot outputs 
plt.scatter(diabetes_X_test, diabetes_y_test, color='black') 
plt.plot(diabetes_X_test, regr.predict(diabetes_X_test), color='blue', 
     linewidth=3) 

plt.xticks(()) 
plt.yticks(()) 

plt.show() 

wenn ich die diabetes_X_train drucken es gibt mir diese

[[ 0.07786339] 
[-0.03961813] 
[ 0.01103904] 
[-0.04069594] 
[-0.03422907]...] 

i dies unter der Annahme, der r-Wert von Korrelation und Koeffizienten zu bekommen. wenn ich die diabetes_Y_train drucke es gibt mir so etwas wie diese

[ 233. 91. 111. 152. 120. .....] 

mein Problem ist, wie kann ich r Wert aus dem Regen und weise es x-Achse

+0

dank Werte bekam @ user20160 .die Art, wie ich zuerst die 1 Jahr Daten i nehmen tat wurde und den r-Wert unter Verwendung von Pearson-Korrelation und corefficeint finden (x ist Wert, y ist Datum/Monat). So, dass ich 8 r Werte für 8 Jahre (2006-2014) bekomme. Ich gebe diese 8 r-Werte als x-Achse und Jahr als y aixs zur linearen Regression. ist dieser Ansatz falsch? –

Antwort

0

Es ist nicht die beste Lösung, aber es funktioniert.

Kleine Erklärung: Ich habe Monat auf ihren Indizes in der Liste ersetzt, es ist für den Algorithmus notwendig. Auch ich habe Leerzeichen delimeters auf ';' Delimeters, weil in verschiedenen Reihen unterschiedliche Anzahl von Räumen und es war nicht convinient. Jetzt sind Ihre Daten:

Value;Month;Year 
103.4;April;2006 
270.6;August;2006 
51.9;December;2006 

Und Datei mit den Anfangsdaten ist "data.csv".

import pandas as pd 
import sklearn.linear_model as ll 

data = pd.read_csv('data.csv', sep=';') 
X = data.ix[:,1:3] 
y = data.ix[:,0] 

month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] 

for i, m in enumerate(data.ix[:,1]): 
    data.ix[i,1] = month.index(m) 

X = data.ix[:,1:3] 
lr = ll.LinearRegression() 
lr.fit(X, y) 

######### TEST DATA ########## 
X_test = [[1, 2008], [2, 2008]] 
X_test = pd.DataFrame(X_test, columns=['Month', 'Year']) 

y_test = lr.predict(X_test) 
print(y_test) 

Als Ergebnis des Tests, den mich diese

[69.23079837 80.63691725] 
+0

danke @Konstantin. kannst du mir bitte anstelle von csv-datei sagen, wie man daten, die von der mysql bekommen, zuweist. weil ich Daten von MySQL bekomme und in das Array lege. –

+0

Sie können pandas.read_sql http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html verwenden. Ich habe nicht damit gearbeitet, aber ähnlich, diese Seite wird Ihnen bei der Verbindung helfen http://stackoverflow.com/questions/372885/how-do-i-connect-to-a-mysql-database-in-python – konstov

+0

@Konstantin können Sie bitte die aktualisierte Frage überprüfen –

Verwandte Themen