2016-04-01 21 views
3

Python kullanarak doğrusal regresyon gerçekleştirmeye çalışıyorum.Python (Pandas ve Numpy) kullanılarak doğrusal regresyon

aşağıdaki adımlar yaptı:

: o zaman aşağıdaki hatayı alıyorum

regression_coeff = n.polyfit(x,y,1) 

Ve:

import pandas as p 
import numpy as n 
data = p.read_csv("...path\Housing.csv", usecols=[1]) # I want the first col 
data1 = p.read_csv("...path\Housing.csv", usecols=[3]) # I want the 3rd col 
x = data 
y = data1 

Sonra aşağıdaki katsayılarına edinin ve kullanmaya çalıştığınızda

raise TypeError("expected 1D vector for x") 
TypeError: expected 1D vector for x 

x veyazdıklarında başım ağrıyor, bunların her ikisi de 1D vektörleri olduklarını açıkça görebiliyorum.

Birisi yardım edebilir mi?

Veri kümesi burada bulunabilir: DataSets

orijinal kodudur:

import pandas as p 
import numpy as n 

data = pd.read_csv('...\housing.csv', usecols = [1]) 
data1 = pd.read_csv('...\housing.csv', usecols = [3]) 

x = data 
y = data1 
regression = n.polyfit(x, y, 1) 
+2

hiçbir * yoktur ve şunu kullanın: Sadece .squeeze() kullanarak np.polyfit() giriş formatına uygun olmalıdır pd.Series için read_csv() çıktısını dönüştürebilirsiniz *: –

+0

seni alamadım. –

+2

Büyük olasılıkla kodunuzu eklemeyi unutmuşsunuzdur. –

cevap

4

Bu çalışması gerekir:

np.polyfit(data.values.flatten(), data1.values.flatten(), 1) 

data bir dataframe ve onun değerleri 2D şunlardır:

>>> data.values.shape 
(546, 1) 

flatten() 1D dizi haline dönüşür:

polyfit() için gereklidir
>> data.values.flatten().shape 
(546,) 

.

basit bir alternatif:

df = pd.read_csv("Housing.csv") 
np.polyfit(df['price'], df['bedrooms'], 1) 
+0

Çok teşekkürler Mike :) Mükemmel çalıştı. Düzleştirmeyi() eklediğinizde neden işe yaradığını söyler misiniz, aslında ne yaptı? –

+0

Bazı açıklamalar eklendi. –

2

Python veri doğru biçimde değil söylüyorum, özellikle x bir 1D dizisi olmalıdır, sizin durumunuzda bir 2D-imsi panda dizidir. Verilerinizi sayısal bir dizide dönüştürebilir ve sorununuzu gidermek için sıkıştırın.

import pandas as pd 
import numpy as np 

data = pd.read_csv('../Housing.csv', usecols = [1]) 
data1 = pd.read_csv('../Housing.csv', usecols = [3]) 
data = np.squeeze(np.array(data)) 
data1 = np.squeeze(np.array(data1)) 

x = data 
y = data1 
regression = np.polyfit(x, y, 1) 
+0

Nasıl 2Dish dizisidir. Açıkça görülüyor ki sadece bir sütun alıyorum. Lütfen beni daha iyi anlamaya yönlendirin. –

2

pandas.read_csv()np.polyfit tek bir uyum için, her iki x ve y için 1D vector isterken iki boyutları olan bir DataFrame döndürür.

data = pd.read_csv('../Housing.csv', usecols = [1]).squeeze() 
data1 = p.read_csv("...path\Housing.csv", usecols=[3]).squeeze() 
+0

Mükemmel bir şekilde çalıştı. Ancak, bana biraz temel arka plan verebilir misiniz, ya da en azından referans ve öğrenilecek bir yer için bir link verebilir misiniz? –

+0

İlgili dokümanlara bağlantılar eklendi. – Stefan