SKlearn lineáris regressziós coeffs egyenlő 0

szavazat
1

Gond volt a legegyszerűbb példa a lineáris regresszió. A kimenet, az együtthatók nulla, mit csinálok rosszul? Köszönöm a segítséget.

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

x = [25,50,75,100]
y = [10.5,17,23.25,29]
pred = [27,41,22,33]
df = pd.DataFrame({'x':x, 'y':y, 'pred':pred})
x = df['x'].values.reshape(1,-1)
y = df['y'].values.reshape(1,-1)
pred = df['pred'].values.reshape(1,-1)
plt.scatter(x,y,color='black')
clf = lm.LinearRegression(fit_intercept =True)
clf.fit(x,y)


m=clf.coef_[0]
b=clf.intercept_
print(slope=,m, intercept=,b)

output:

slope= [ 0.  0.  0.  0.] intercept= [ 10.5   17.    23.25  29.  ]
A kérdést 10/03/2018 12:03
felhasználó
Más nyelveken...                            


2 válasz

szavazat
2

Gondoljon bele egy pillanatra. Tekintettel arra, hogy több együtthatók vissza azt sugallja, hogy több tényező. Mivel ez egy regressziós, a probléma abban rejlik, hogy az alakja a bemeneti adatokat. Az eredeti átalakítása tette az osztály úgy gondolja, hogy van 4 változó és csak egy megfigyelő egy változót.

Próbáljon ki valami ehhez hasonló:

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

x = np.array([25,99,75,100, 3, 4, 6, 80])[..., np.newaxis]
y = np.array([10.5,17,23.25,29, 1, 2, 33, 4])[..., np.newaxis]

clf = lm.LinearRegression()
clf.fit(x,y)
clf.coef_

output:

array(` 0`.`09399429`)
Válaszolt 10/03/2018 12:31
a forrás felhasználó

szavazat
0

Ahogy @ jrjames83 már kifejtette az ő válasza után átalakítása ( .reshape(1,-1)), akkor ettek egy adathalmaz, amely egy minta (sor) és négy jellemzői (oszlopok):

In [103]: x.shape
Out[103]: (1, 4)

valószínűleg akarta átformálni ezt így:

In [104]: x = df['x'].values.reshape(-1, 1)

In [105]: x.shape
Out[105]: (4, 1)

úgy, hogy ha lett volna négy mintát és egy funkciót ...

Másik lehetőség, hogy átadhatja DataFrame oszlopokat a modell a következő (nem kell, hogy szennyezik a memória további változók):

In [98]: clf = lm.LinearRegression(fit_intercept =True)

In [99]: clf.fit(df[['x']],df['y'])
Out[99]: LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False)

In [100]: clf.coef_
Out[100]: array([0.247])

In [101]: clf.intercept_
Out[101]: 4.5
Válaszolt 10/03/2018 13:15
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more