我写了一个预测房价的代码。问题是,我获得的准确性得分为负。 我使用了5种不同的算法,准确性得分无处不在。
我遇到的第一个问题是使用.map
函数时收到警告,但我认为这不是问题。
回归模型有效,但是它们的训练和测试准确性无处不在。 我也尝试过这个:
from sklearn.metrics import accuracy_score
...
score_train = regression.accuracy_score(variables_train, result_train)
...
但是它向我显示了AttributeError:“ LinearRegression”对象没有属性“ accuracy_score”
您可以从此处下载数据库:
https://www.sendspace.com/file/93nkdy
这是代码:
import pandas as pd
from sklearn import linear_model
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
#pandas display options
pd.set_option('display.max_rows', 70)
pd.set_option('display.max_columns', 100)
pd.set_option('display.width', 1000)
data = pd.read_csv("validate.csv")
data = data.drop(columns = ["id"])
data = data.dropna(axis='columns')
data_for_pred = data[["bedrooms_total", "baths_total",
"sq_ft_tot_fn", "garage_capacity",
"city", "total_stories", "rooms_total",
"garage", "flood_zone","price_closed"]]
#to see how many different values I have
cities = data_for_pred['city'].unique()
garage = data_for_pred['garage'].unique()
flood_zone = data_for_pred['flood_zone'].unique()
#mapping so that I can do my regression
data_for_pred['city'] = data_for_pred['city'].map({'Woodstock': 1, 'Barnard': 2, 'Pomfret': 3})
data_for_pred['garage'] = data_for_pred['garage'].map({'No': 0, 'Yes': 1})
data_for_pred['flood_zone'] = data_for_pred['flood_zone'].map({'Unknown': 0, 'Yes': 1, 'No': -1})
#print(data_for_pred)
def regression_model(bedrooms_num, baths_num, sq_ft_tot, garage_cap,
city, total_stor, rooms_tot, garage, flood_zone):
classifiers = [
["Linear regression", linear_model.LinearRegression()],
["Support vector regression", SVR(gamma = 'auto')],
["Decision tree regression", DecisionTreeRegressor()],
["SVR - RBF", SVR(kernel = "rbf", C = 1e3, gamma = 0.1)],
["SVR - Linear regression", SVR(kernel = "linear", C = 1e0)]]
variables = data_for_pred.iloc[:,:-1]
results = data_for_pred.iloc[:,-1]
predictionData = [bedrooms_num, baths_num, sq_ft_tot, garage_cap, city,
total_stor, rooms_tot, garage, flood_zone]
info = ""
for item in classifiers:
regression = item[1]
variables_train, variables_test, result_train, result_test = train_test_split(variables, results , test_size = 0.2, random_state = 4)
regression.fit(variables_train, result_train)
#Prediction
prediction = regression.predict([predictionData])
prediction = round(prediction[0], 2)
#Accuracy of prediction
score_train = regression.score(variables_train, result_train)
score_train = round(score_train*100, 2)
score_test = regression.score(variables_test, result_test)
score_test = round(score_test*100, 2)
info += str(item[0]) + " prediction: " + str(prediction) + " | Train accuracy: " + str(score_train) + "% | Test accuracy: " + str(score_test) + "%\n"
return info
print(regression_model(7, 8, 4506, 0, 1, 2.00, 15, 0, 0)) #true value 375000
print(regression_model(8, 8, 5506, 0, 1, 2.00, 15, 0, 0)) #true value more then 375000
答案 0 :(得分:2)
为分类问题定义了准确性。 这里有一个回归问题。
.score
的{{1}}方法返回预测的确定系数R ^ 2,而不是准确性。
score(self,X,y [,sample_weight])返回系数 确定预测的R ^ 2。
https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html
编辑
如果您预测标签(分类问题),可以使用此 。
LinearRegression
如果您预测标量值(回归问题)-这是您的情况,则应使用以下回归指标:
from sklearn.metrics import accuracy_score
scores_classification = accuracy_score(result_train, prediction)
所有回归评分方法都在这里:https://scikit-learn.org/stable/modules/classes.html#module-sklearn.metrics
编辑2
使用:
scores_regr = metrics.mean_squared_error(y_true, y_pred)