title: How is Linear Regression model from sklearn predicting non-linearly in the following code?
body: <p>Since linear regression algorithms find the best fit line for the training data, so the forecast for the new data will always line on that best fit line. Then how is Linear Regression model from sklearn predicting data non-linearly as shown in this image. 
  !(<a href="https://pythonprogramming.net/static/images/machine-learning/linear-regression-prediction.png" rel="nofollow noreferrer">https://pythonprogramming.net/static/images/machine-learning/linear-regression-prediction.png</a>)</p>
  
  <pre><code>import Quandl, math
  import numpy as np
  import pandas as pd
  from sklearn import preprocessing, cross_validation, svm
  from sklearn.linear_model import LinearRegression
  import matplotlib.pyplot as plt
  from matplotlib import style
  import datetime
  
  style.use('ggplot')
  
  df = Quandl.get("WIKI/GOOGL")
  df = df[['Adj. Open',  'Adj. High',  'Adj. Low',  'Adj. Close', 'Adj. Volume']]
  df['HL_PCT'] = (df['Adj. High'] - df['Adj. Low']) / df['Adj. Close'] * 100.0
  df['PCT_change'] = (df['Adj. Close'] - df['Adj. Open']) / df['Adj. Open'] * 100.0
  
  df = df[['Adj. Close', 'HL_PCT', 'PCT_change', 'Adj. Volume']]
  forecast_col = 'Adj. Close'
  df.fillna(value=-99999, inplace=True)
  forecast_out = int(math.ceil(0.01 * len(df)))
  df['label'] = df[forecast_col].shift(-forecast_out)
  
  X = np.array(df.drop(['label'], 1))
  X = preprocessing.scale(X)
  X_lately = X[-forecast_out:]
  X = X[:-forecast_out]
  
  df.dropna(inplace=True)
  
  y = np.array(df['label'])
  
  X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2)
  clf = LinearRegression(n_jobs=-1)
  clf.fit(X_train, y_train)
  confidence = clf.score(X_test, y_test)
  
  forecast_set = clf.predict(X_lately)
  df['Forecast'] = np.nan
  
  last_date = df.iloc[-1].name
  last_unix = last_date.timestamp()
  one_day = 86400
  next_unix = last_unix + one_day
  
  for i in forecast_set:
      next_date = datetime.datetime.fromtimestamp(next_unix)
      next_unix += 86400
      df.loc[next_date] = [np.nan for _ in range(len(df.columns)-1)]+[i]
  
  df['Adj. Close'].plot()
  df['Forecast'].plot()
  plt.legend(loc=4)
  plt.xlabel('Date')
  plt.ylabel('Price')
  plt.show()
  </code></pre>