2017-05-27 2 views
0
from random import randint,choice 
from sklearn.cross_validation import train_test_split 
import numpy as np 
from sklearn.linear_model import LinearRegression as LR 

x1 = [] 
for i in range(1000): 
    if i%2 == 0: 
     x1.append(1001) 
    else: 
     x1.append(999) 

leng = [x for x in range(len(x1))] 

a = np.array(leng).reshape(len(leng),1) 
b = np.array(x1).reshape(len(leng),1) 

t1,t2,y1,y2 = train_test_split(a,b) 

l = LR() 
l.fit(t1,y1) 
print(l.score(t2,y2)) 
print(l.predict(t2)) 

従属値は、線形独立軸上でのみ1001または999です。線形回帰は1.0でこれをスコアする必要があります。しかし、私のスコアは0未満です。私は間違ったことをしているに違いないと思う。明白なパターンのためのscikit-learn線形回帰による非常に低い得点

答えて

2

abの間に線形関係や明白なパターンがないためです。 .scoreプロパティはR-squaredで、R-平方は0である必要があります。手動、

predictions = model.predict(t2) 
rss = np.sum(np.square(predictions - y2.mean()))  
sst = np.sum(np.square(b - b.mean())) 

rsquared = rss/sst; rsquared 
Out[31]: 0.0040910187945010796