75 lines
3.4 KiB
Python
75 lines
3.4 KiB
Python
import pandas as pd
|
|
from sklearn.tree import DecisionTreeRegressor
|
|
from sklearn.ensemble import RandomForestRegressor
|
|
from sklearn.metrics import mean_absolute_percentage_error
|
|
from sklearn.model_selection import train_test_split
|
|
from sklearn.linear_model import LinearRegression
|
|
|
|
def get_accuracy(target, prediction):
|
|
error_percent = mean_absolute_percentage_error(target, prediction)
|
|
accuracy = round((1-error_percent)*100,2)
|
|
return accuracy
|
|
|
|
def decision_tree(max_leaf_nodes, train_features, test_features, train_targets, test_targets):
|
|
model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
|
|
model.fit(train_features, train_targets)
|
|
predictions = model.predict(test_features)
|
|
return get_accuracy(test_targets, predictions)
|
|
|
|
def random_forest(train_features, test_features, train_targets, test_targets):
|
|
model = RandomForestRegressor()
|
|
model.fit(train_features, train_targets)
|
|
predictions = model.predict(test_features)
|
|
return get_accuracy(test_targets, predictions)
|
|
|
|
def linear_regreassion(train_features, test_features, train_targets, test_targets):
|
|
model = LinearRegression()
|
|
model.fit(train_features, train_targets)
|
|
predictions = model.predict(test_features)
|
|
return get_accuracy(test_targets, predictions)
|
|
|
|
####### Melbourne Predicitons ########
|
|
|
|
melbourne_data = pd.read_csv('melb_data.csv')
|
|
melbourne_data = melbourne_data.dropna()
|
|
# for column_name in melbourne_data.columns:
|
|
# print(column_name)
|
|
melbourne_features = ['Rooms', 'Bathroom', 'Landsize', 'BuildingArea', 'YearBuilt', 'Lattitude', 'Longtitude']
|
|
|
|
target = melbourne_data.Price
|
|
features = melbourne_data[melbourne_features]
|
|
train_features, test_features, train_targets, test_targets = train_test_split(features, target, random_state=3)
|
|
|
|
print('\n\tMelbourne House Price Guessing')
|
|
print('Decision Tree Accuracy')
|
|
for max_leaf_nodes in [5,10,50,100,1000, 5000]:
|
|
melbourne_accuracy = decision_tree(max_leaf_nodes, train_features, test_features, train_targets, test_targets)
|
|
print(f' max leaf nodes: {max_leaf_nodes}\t{melbourne_accuracy}%')
|
|
melbourne_forest_accuracy = random_forest(train_features, test_features, train_targets, test_targets)
|
|
print(f'Forest accuracy: {melbourne_forest_accuracy}%')
|
|
melbourne_linear_accuracy = linear_regreassion(train_features, test_features, train_targets, test_targets)
|
|
print(f'Regression accuracy: {melbourne_linear_accuracy}%')
|
|
|
|
|
|
|
|
####### Iowa Predicitons ########
|
|
|
|
iowa_data = pd.read_csv('train.csv')
|
|
# for column_name in iowa_data.columns:
|
|
# print(column_name)
|
|
# print(iowa_data.head())
|
|
iowa_features = ['LotArea','YearBuilt','1stFlrSF','2ndFlrSF','FullBath','BedroomAbvGr','TotRmsAbvGrd']
|
|
|
|
target = iowa_data.SalePrice
|
|
features = iowa_data[iowa_features]
|
|
train_features, test_features, train_targets, test_targets = train_test_split(features, target, random_state=3)
|
|
|
|
print('\n\tIowa House Price Guessing')
|
|
print('Decision Tree Accuracy')
|
|
for max_leaf_nodes in [5,10,50,100,1000, 5000]:
|
|
iowa_accuracy = decision_tree(max_leaf_nodes, train_features, test_features, train_targets, test_targets)
|
|
print(f' max leaf nodes: {max_leaf_nodes}\t{iowa_accuracy}%')
|
|
iowa_forest_accuracy = random_forest(train_features, test_features, train_targets, test_targets)
|
|
print(f'Forest accuracy: {iowa_forest_accuracy}%')
|
|
iowa_linear_accuracy = linear_regreassion(train_features, test_features, train_targets, test_targets)
|
|
print(f'Regression accuracy: {iowa_linear_accuracy}%') |