???♂? 個人主頁:@艾派森的個人主頁
???作者簡介:Python學習者
?? 希望大家多多支持,我們一起進步!??
如果文章對你有幫助的話,
歡迎評論 ??點贊???? 收藏 ??加關注+
喜歡大數(shù)據(jù)分析項目的小伙伴,希望可以多多支持該系列的其他文章
大數(shù)據(jù)分析案例-基于隨機森林算法預測人類預期壽命 |
大數(shù)據(jù)分析案例-基于隨機森林算法的商品評價情感分析 |
大數(shù)據(jù)分析案例-用RFM模型對客戶價值分析(聚類) |
大數(shù)據(jù)分析案例-對電信客戶流失分析預警預測 |
大數(shù)據(jù)分析案例-基于隨機森林模型對北京房價進行預測 |
大數(shù)據(jù)分析案例-基于RFM模型對電商客戶價值分析 |
大數(shù)據(jù)分析案例-基于邏輯回歸算法構建垃圾郵件分類器模型 |
大數(shù)據(jù)分析案例-基于決策樹算法構建員工離職預測模型 |
大數(shù)據(jù)分析案例-基于KNN算法對茅臺股票進行預測 |
大數(shù)據(jù)分析案例-基于多元線性回歸算法構建廣告投放收益模型 |
大數(shù)據(jù)分析案例-基于隨機森林算法構建返鄉(xiāng)人群預測模型 |
大數(shù)據(jù)分析案例-基于決策樹算法構建金融反欺詐分類模型 |
目錄
1.項目背景
2.項目簡介
2.1項目說明
2.2數(shù)據(jù)說明
2.3技術工具
3.算法原理
4.項目實施步驟
4.1理解數(shù)據(jù)
4.2數(shù)據(jù)預處理
4.3探索性數(shù)據(jù)分析
4.4特征工程
4.5模型構建
4.6模型評估
5.實驗總結
源代碼
1.項目背景
????????隨著經(jīng)濟的發(fā)展和城市化進程的加速,房地產(chǎn)市場日益繁榮,房屋價格的波動不僅關系到千家萬戶的財產(chǎn)安全,也對整個社會經(jīng)濟穩(wěn)定產(chǎn)生重要影響。因此,準確預測房屋價格的變化趨勢,對于政府制定房地產(chǎn)政策、投資者決策以及消費者購房計劃都具有重要的參考價值。
????????近年來,機器學習技術取得了長足的發(fā)展,為房屋價格預測提供了新的解決思路。基于機器學習算法的房屋價格預測模型,能夠通過學習歷史數(shù)據(jù)中的潛在規(guī)律,實現(xiàn)對未來房屋價格的預測。在眾多機器學習算法中,LinearRegression(線性回歸)是一種基礎且廣泛應用的算法,它通過建立自變量與因變量之間的線性關系,實現(xiàn)對因變量的預測。
研究背景:
- 房地產(chǎn)市場的波動性:受到宏觀經(jīng)濟、政策調(diào)控、供需關系等多種因素的影響,房地產(chǎn)市場呈現(xiàn)出高度的波動性和不確定性。這使得傳統(tǒng)的經(jīng)濟學模型在預測房屋價格時面臨諸多挑戰(zhàn)。而機器學習算法具有較強的自適應能力和學習能力,能夠從歷史數(shù)據(jù)中挖掘出復雜的非線性關系,為房屋價格預測提供更準確的依據(jù)。
- 數(shù)據(jù)驅(qū)動的決策支持:在大數(shù)據(jù)時代,數(shù)據(jù)已經(jīng)成為推動社會發(fā)展的重要驅(qū)動力。對于房地產(chǎn)市場而言,海量的數(shù)據(jù)包含了豐富的信息,如房屋的位置、面積、建造年份、周邊環(huán)境等。通過機器學習算法對這些數(shù)據(jù)進行深度挖掘和分析,可以為政府、企業(yè)和個人提供更加科學、精準的決策支持。
- 線性回歸算法的優(yōu)勢:LinearRegression算法作為一種經(jīng)典的回歸分析方法,具有原理簡單、計算高效、易于實現(xiàn)等優(yōu)點。它能夠根據(jù)自變量與因變量之間的線性關系,構建一個具有預測功能的數(shù)學模型。在實際應用中,LinearRegression算法往往能夠取得較好的預測效果,并且在處理大規(guī)模數(shù)據(jù)時具有較高的計算效率。
研究意義:
????????基于LinearRegression回歸算法構建房屋價格預測模型,不僅有助于提高房屋價格預測的準確性和時效性,還可以為政府、企業(yè)和個人提供更加科學、合理的決策依據(jù)。具體來說,該研究的意義體現(xiàn)在以下幾個方面:
- 政府決策支持:通過房屋價格預測模型,政府可以更加準確地把握房地產(chǎn)市場的運行態(tài)勢,為制定和調(diào)整房地產(chǎn)政策提供科學依據(jù),從而維護房地產(chǎn)市場的健康穩(wěn)定發(fā)展。
- 企業(yè)投資決策:對于房地產(chǎn)企業(yè)而言,準確的房屋價格預測有助于企業(yè)把握市場機遇,規(guī)避市場風險,制定合理的投資策略和營銷策略,提高企業(yè)的經(jīng)濟效益。
- 個人購房指導:對于廣大購房者來說,房屋價格預測模型可以幫助他們更加理性地看待房地產(chǎn)市場波動,合理規(guī)劃購房預算和購房時機,降低購房風險。
2.項目簡介
2.1項目說明
????????本實驗旨在通過使用線性回歸算法,基于歷史房屋銷售數(shù)據(jù),構建一個房屋價格預測模型。通過分析房屋價格與各種特征之間的線性關系,我們可以更好地理解這些影響因素對房屋價格的影響程度,并為未來的房地產(chǎn)市場提供更準確的價格預測。通過這個實驗,我們可以深入了解線性回歸在房地產(chǎn)領域的應用,為相關領域的從業(yè)人員和決策者提供有益的參考。此外,我們還將評估模型的性能,并討論可能的改進和進一步研究方向。這將有助于推動機器學習在房地產(chǎn)領域的應用和發(fā)展。
2.2數(shù)據(jù)說明
? ? ? ? 本數(shù)據(jù)集來源于Kaggle,原始數(shù)據(jù)共有50000條,6列,各變量含義解釋如下:
SquareFeet:房子的平方英尺。
Bedrooms:臥室的數(shù)量。
Bathrooms:衛(wèi)生間的數(shù)量。
Neighborhood:房子所在的區(qū)域。
YearBuilt:哪一年建造的。
Price:房屋的價格。
2.3技術工具
Python版本:3.9
代碼編輯器:jupyter notebook
3.算法原理
????????線性回歸是一個主要影響因素作為自變量來解釋因變量的變化,在現(xiàn)實問題研究中,因變量的變化往往受幾個重要因素的影響,此時就需要用兩個或兩個以上的影響因素作為自變量來解釋因變量的變化,這就是多元回歸亦稱多重回歸。當多個自變量與因變量之間是線性關系時,所進行的回歸分析就是多元線性回歸。 設y為因變量X1,X2…Xk為自變量,并且自變量與因變量之間為線性關系時,則多元線性回歸模型為:
????????Y=b0+b1x1+…+bkxk+e
????????其中,b0為常數(shù)項,b1,b2…bk為回歸系數(shù),b1為X1,X2…Xk固定時,x1每增加一個單位對y的效應,即x1對y的偏回歸系數(shù);同理b2為X1,X2…Xk固定時,x2每增加一個單位對y的效應,即,x2對y的偏回歸系數(shù),等等。如果兩個自變量x1,x2同一個因變量y呈線相關時,可用二元線性回歸模型描述為:
????????y=b0 +b1x1 +b2x2 +e
????????建立多元線性回歸模型時,為了保證回歸模型具有優(yōu)良的解釋能力和預測效果,應首先注意自變量的選擇,其準則是:
(1)自變量對因變量必須有顯著的影響,并呈密切的線性相關;
(2)自變量與因變量之間的線性相關必須是真實的,而不是形式上的;
(3)自變量之間應具有一定的互斥性,即自變量之間的相關程度不應高于自變量與因變量之間的相關程度;
(4)自變量應具有完整的統(tǒng)計數(shù)據(jù),其預測值容易確定。
4.項目實施步驟
4.1理解數(shù)據(jù)
首先導入常用的第三方庫并加載數(shù)據(jù)
查看數(shù)據(jù)大小
查看數(shù)據(jù)基本信息
查看描述性統(tǒng)計
從結果中我們看到價格列中最小值為負值,存在異常值,后面需要處理
4.2數(shù)據(jù)預處理
查看缺失值情況
發(fā)現(xiàn)沒有缺失值不需要處理
查看重復值情況
發(fā)現(xiàn)結果為False,說明不存在重復值,不需要處理
查看異常數(shù)據(jù)
剔除異常數(shù)據(jù)
4.3探索性數(shù)據(jù)分析
我們可以看到平方英尺面積和價格之間呈正相關關系。
農(nóng)村、郊區(qū)和城市數(shù)據(jù)的價格分布是相等的。
上圖遵循高斯分布 中位數(shù)價格為225052.14?
農(nóng)村、郊區(qū)和城市數(shù)據(jù)比例幾乎是一樣的。
我們可以看到,鄰域和建造年份沒有太大的關系
4.4特征工程
準備建模的數(shù)據(jù),并拆分數(shù)據(jù)集為訓練集和測試集
數(shù)據(jù)標準化處理
??
4.5模型構建
初始化模型
自定義一個評估模型的函數(shù)
構建模型
?
4.6模型評估
可以發(fā)現(xiàn)線性回歸模型的準確率是最高的
5.實驗總結
????????本實驗通過應用線性回歸算法構建了一個房屋價格預測模型,旨在通過各種特征變量對房屋價格進行建模和預測。以下是實驗的主要總結點:
-
數(shù)據(jù)收集和預處理: 首先,我們收集了包含房屋價格和各種特征的數(shù)據(jù)集,確保數(shù)據(jù)的完整性和質(zhì)量。在數(shù)據(jù)預處理階段,進行了清洗、缺失值處理和特征選擇,以確保輸入數(shù)據(jù)的質(zhì)量。
-
模型構建: 采用線性回歸算法建立了房屋價格預測模型。該模型基于線性關系,通過訓練數(shù)據(jù)擬合出最佳的權重系數(shù),以最小化預測值與實際值之間的差異。
-
模型評估: 使用評價指標如均方誤差(MSE)、R^2分數(shù)等對模型進行了評估。評估結果對模型的準確性和泛化能力進行了全面的分析,以確保模型能夠在新數(shù)據(jù)上進行可靠的預測。
-
應用前景: 通過構建房屋價格預測模型,我們?yōu)榉康禺a(chǎn)市場相關的決策提供了一個有力的工具。該模型不僅可以幫助買家和賣家更好地了解市場趨勢,還可以為投資者和開發(fā)商提供決策支持,優(yōu)化房地產(chǎn)資產(chǎn)的配置。
-
局限性和未來工作: 實驗中可能存在一些局限性,比如模型對非線性關系的適應性較差。未來的工作可以探索更復雜的模型,考慮更多特征或采用其他機器學習算法,以提高預測性能。
????????綜合而言,通過本實驗,我們成功構建了一個基于線性回歸的房屋價格預測模型,并為房地產(chǎn)市場相關的決策提供了有益的信息。模型的建立和評估過程為未來類似問題的研究提供了有力的參考和指導。
心得與體會:
通過這次Python項目實戰(zhàn),我學到了許多新的知識,這是一個讓我把書本上的理論知識運用于實踐中的好機會。原先,學的時候感嘆學的資料太難懂,此刻想來,有些其實并不難,關鍵在于理解。
在這次實戰(zhàn)中還鍛煉了我其他方面的潛力,提高了我的綜合素質(zhì)。首先,它鍛煉了我做項目的潛力,提高了獨立思考問題、自我動手操作的潛力,在工作的過程中,復習了以前學習過的知識,并掌握了一些應用知識的技巧等
在此次實戰(zhàn)中,我還學會了下面幾點工作學習心態(tài):
1)繼續(xù)學習,不斷提升理論涵養(yǎng)。在信息時代,學習是不斷地汲取新信息,獲得事業(yè)進步的動力。作為一名青年學子更就應把學習作為持續(xù)工作用心性的重要途徑。走上工作崗位后,我會用心響應單位號召,結合工作實際,不斷學習理論、業(yè)務知識和社會知識,用先進的理論武裝頭腦,用精良的業(yè)務知識提升潛力,以廣博的社會知識拓展視野。
2)努力實踐,自覺進行主角轉(zhuǎn)化。只有將理論付諸于實踐才能實現(xiàn)理論自身的價值,也只有將理論付諸于實踐才能使理論得以檢驗。同樣,一個人的價值也是透過實踐活動來實現(xiàn)的,也只有透過實踐才能鍛煉人的品質(zhì),彰顯人的意志。
3)提高工作用心性和主動性。實習,是開端也是結束。展此刻自我面前的是一片任自我馳騁的沃土,也分明感受到了沉甸甸的職責。在今后的工作和生活中,我將繼續(xù)學習,深入實踐,不斷提升自我,努力創(chuàng)造業(yè)績,繼續(xù)創(chuàng)造更多的價值。
這次Python實戰(zhàn)不僅僅使我學到了知識,豐富了經(jīng)驗。也幫忙我縮小了實踐和理論的差距。在未來的工作中我會把學到的理論知識和實踐經(jīng)驗不斷的應用到實際工作中,為實現(xiàn)理想而努力。文章來源:http://www.zghlxwxcb.cn/news/detail-779785.html
源代碼
SquareFeet:房子的平方英尺。
Bedrooms:臥室的數(shù)量。
Bathrooms:衛(wèi)生間的數(shù)量。
Neighborhood:房子所在的區(qū)域。
YearBuilt:哪一年建造的。
Price:房屋的價格。
import pandas as pd
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
df = pd.read_csv('housing_price_dataset.csv')
df.head()
df.shape
df.info()
df.describe()
df.isnull().sum() # 統(tǒng)計缺失數(shù)據(jù)
any(df.duplicated()) # 檢驗是否存在重復數(shù)據(jù)
df[df['Price']<=0] # 異常數(shù)據(jù)
df = df[df['Price']>=0] # 剔除價格為負數(shù)的異常數(shù)據(jù)
df.shape
# 房屋大小與價格的關系
sns.scatterplot(data=df, x='SquareFeet',y='Price')
plt.show()
我們可以看到平方英尺面積和價格之間呈正相關關系。
# 不同區(qū)域的房屋價格關系
sns.scatterplot(data=df, x='SquareFeet',y='Price',hue='Neighborhood')
plt.show()
# 不同區(qū)域的房屋價格情況
sns.barplot(data=df, x='Neighborhood',y='Price',hue='Neighborhood')
plt.legend(loc=10)
plt.show()
農(nóng)村、郊區(qū)和城市數(shù)據(jù)的價格分布是相等的。
# 價格分布情況
sns.histplot(data=df,x='Price');
median = np.median(df['Price'])
print(f'{median:.2f} is the Median Price.')
plt.show()
上圖遵循高斯分布
中位數(shù)價格為225052.14
# 不同區(qū)域的比例情況
plt.pie(df["Neighborhood"].value_counts(), labels=df["Neighborhood"].value_counts().index, autopct='%1.1f%%', startangle=90)
plt.title('Distribution of Neighborhoods')
plt.show()
農(nóng)村、郊區(qū)和城市數(shù)據(jù)比例幾乎是一樣的。
# 相關系數(shù)分析
neighbourhood_codes = {'Rural':0,'Suburb':1,'Urbun':2} # 編碼處理
mapping = df['Neighborhood'].map(neighbourhood_codes)
df['Price'].corr(mapping)
plt.figure(figsize=(8,6))
sns.heatmap(df[df.select_dtypes(include=np.number).columns.to_list()].corr(), annot=True);
我們可以看到,鄰域和建造年份沒有太大的關系
# 準備建模數(shù)據(jù)
X = df.drop(columns = ["Price", "Neighborhood", "YearBuilt"], axis = 1)
y = df["Price"]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 42)
print(X_train.shape[0])
print(X_test.shape[0])
# 數(shù)據(jù)標準化處理
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 初始化模型
from sklearn.linear_model import LinearRegression, ElasticNet
from sklearn.svm import SVR
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor, AdaBoostRegressor
from sklearn.neighbors import KNeighborsRegressor
import xgboost as xb
models = {
"Linear Regreesion": LinearRegression(),
"ElasticNet": ElasticNet(),
"Support Vector Regressor": SVR(),
"Decison Tree Regressor": DecisionTreeRegressor(),
"Random Forest Regressor": RandomForestRegressor(),
"Ada Boost Regressor": AdaBoostRegressor(),
"XG Boost Regressor": xb.XGBRegressor(),
"K Neighbors Regressor": KNeighborsRegressor()
}
from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error
# 自定義一個評估模型的函數(shù)
def evaluate_model(X_train, X_test, y_train, y_test, models):
report = {}
for i in range(len(models)):
model = list(models.values())[i]
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
r2score = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
mae = mean_absolute_error(y_test, y_pred)
report[list(models.keys())[i]] = {
"R2 SCORE": r2score,
"MEAN SQUARED ERROR": mse,
"MEAN ABSOLUTE ERROR": mae
}
return report
model_matrics = evaluate_model(X_train, X_test, y_train, y_test, models)
for model, metrics in model_matrics.items():
print(f"{model} Metrics:")
print(f" Accuracy: {metrics['R2 SCORE']}")
print(f" Mean Squared Error: {metrics['MEAN SQUARED ERROR']}")
print(f" Mean Absolute Error: {metrics['MEAN ABSOLUTE ERROR']}")
print("\n" + "=" * 30 + "\n")
# 打印出準確率最高的模型及其準確率
max_accuracy_model = max(model_matrics, key=lambda k: model_matrics[k]['R2 SCORE'])
max_accuracy_value = model_matrics[max_accuracy_model]['R2 SCORE']
print(f"The model with the highest accuracy is '{max_accuracy_model}' with an accuracy of {max_accuracy_value}.")
# 模型效果可視化
best_model = LinearRegression()
best_model.fit(X_train, y_train)
y_test_pred = best_model.predict(X_test)
y_train_pred = best_model.predict(X_train)
plt.figure(figsize=(8, 6))
plt.scatter(y_train, y_train_pred, color='red', label='Train', alpha=0.5)
plt.scatter(y_test, y_test_pred, color='blue', label='Test', alpha=0.5)
plt.plot(y_train, y_train, color='green', linestyle='--', label='Ideal')
plt.xlabel('Actual Prices')
plt.ylabel('Predicted Prices')
plt.title('Scatter Plot: Actual Prices vs. Predicted Prices')
plt.legend()
plt.grid(True)
plt.show()
plt.figure(figsize=(10,6))
y_pred = best_model.predict(X_test)
plt.plot(range(len(y_test))[:200],y_pred[:200],'b',label='predict')
plt.plot(range(len(y_test))[:200],y_test[:200],'r',label='true')
plt.legend(loc='upper right',fontsize=15)
plt.xlabel('the number of house',fontdict={'weight': 'normal', 'size': 15})
plt.ylabel('value of Price',fontdict={'weight': 'normal', 'size': 15})
plt.show()
?文章來源地址http://www.zghlxwxcb.cn/news/detail-779785.html
到了這里,關于大數(shù)據(jù)分析案例-基于LinearRegression回歸算法構建房屋價格預測模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!