Shivam Agrawal
Shivam Agrawal

Reputation: 2103

How to pass float argument in predict function of scikit linear regression?

I am using scikit linear regression - single variable to predict y from x. The argument is in float datatype. How can i transform the float into numpy array to predict the output ?

import matplotlib.pyplot as plt
import pandas
import numpy as np
from sklearn import linear_model
import sys

colnames = ['charge_time', 'running_time']
data = pandas.read_csv('trainingdata.txt', names=colnames)
data = data[data.running_time < 8]
x = np.array(list(data.charge_time))
y = np.array(list(data.running_time))

clf = linear_model.LinearRegression() # Creating a Linear Regression Modal
clf.fit(x[:,np.newaxis], y) # Fitting x and y array as training set
data = float(sys.stdin.readline()) # Input is Float e.g. 4.8
print clf.predict(data[:,np.newaxis]) # As per my understanding parameter should be in 1-D array. 

Upvotes: 0

Views: 2373

Answers (1)

LeartS
LeartS

Reputation: 2896

First of all, a suggestion not directly related to your question:
You don't need to do x = np.array(list(data.charge_time)), you can directly call x = np.array(data.charge_time) or, even better, x = data.charge_time.values which directly returns the underlying ndarray.

It is also not clear to me why you're adding a dimension to the input arrays using np.newaxis.

Regarding your question, predict expects an array-like parameters: that can be a list, a numpy array, or other.

So you should be able to just do data = np.array([float(sys.stdin.readline())]). Putting the float value in a list ([]) is needed because without it numpy would create a 0-d array (i.e. a single value, which is not sliceable) instead of a 1-d array.

Upvotes: 2

Related Questions