自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

利潤預(yù)測不再困難,scikit-learn線性回歸法讓你事半功倍

人工智能
處理數(shù)據(jù)、搭建模型和分析數(shù)據(jù)有很多方法。沒有一種解決方案適用于所有情況,當(dāng)用機(jī)器學(xué)習(xí)解決業(yè)務(wù)問題時(shí),其中一個(gè)關(guān)鍵過程是搭建多個(gè)旨在解決同一個(gè)問題的模型,并選擇最有前途的模型。

1、簡介

生成式人工智能無疑是一個(gè)改變游戲規(guī)則的技術(shù),但對于大多數(shù)商業(yè)問題來說,回歸和分類等傳統(tǒng)的機(jī)器學(xué)習(xí)模型仍然是首選。

想象一下像私募股權(quán)或風(fēng)險(xiǎn)投資這樣的投資者如何利用機(jī)器學(xué)習(xí)。要回答這樣的問題,首先必須了解投資者關(guān)注的數(shù)據(jù)以及它是如何被使用的。投資公司的決策不僅僅基于可量化的數(shù)據(jù),如支出、增長和燒錢率等,還包括創(chuàng)始人的記錄、客戶反饋、產(chǎn)品體驗(yàn)等定性數(shù)據(jù)。

本文將介紹線性回歸的基礎(chǔ)知識,可以在這里找到完整的代碼。

【代碼】:https://github.com/RoyiHD/linear-regression

2、項(xiàng)目設(shè)置

本文將使用Jupyter Notebook進(jìn)行這個(gè)項(xiàng)目。首先導(dǎo)入一些庫。

導(dǎo)入庫

# 繪制圖表
import matplotlib.pyplot as plt
# 數(shù)據(jù)管理和處理
from pandas import DataFrame
# 繪制熱力圖
import seaborn as sns
# 分析
from sklearn.metrics import r2_score
# 用于訓(xùn)練和測試的數(shù)據(jù)管理
from sklearn.model_selection import train_test_split
# 導(dǎo)入線性模型
from sklearn.linear_model import LinearRegression
# 代碼注釋
from typing import List

3、數(shù)據(jù)

為了簡化問題,本文將使用區(qū)域數(shù)據(jù)。這些數(shù)據(jù)代表了公司的支出類別和利潤??梢钥吹揭恍┎煌瑪?shù)據(jù)點(diǎn)的示例。本文希望使用支出數(shù)據(jù)來訓(xùn)練一個(gè)線性回歸模型并預(yù)測利潤。

重要的是要理解本文將使用的數(shù)據(jù)描述的是一家公司的支出情況。只有將支出數(shù)據(jù)與收入增長、當(dāng)?shù)囟愂?、攤銷和市場狀況等數(shù)據(jù)結(jié)合起來時(shí),才能得到有意義的預(yù)測能力。

R&D Spend

Administration

Marketing

Spend Profit

165349.2

136897.8

471784.1

192261.83

162597.7

151377.59

443898.53

191792.06

153441.51

101145.55

407934.54

191050.39

加載數(shù)據(jù)

companies: DataFrame = pd.read_csv("companies.csv", header = 0)

4、數(shù)據(jù)可視化

了解數(shù)據(jù)對于確定要使用的特征、需要進(jìn)行歸一化和轉(zhuǎn)換的特征、從數(shù)據(jù)中刪除異常值以及對特定數(shù)據(jù)點(diǎn)進(jìn)行的處理是很重要的。

目標(biāo)(利潤)直方圖

可以直接使用DataFrame繪制直方圖(Pandas使用Matplotlib來繪制數(shù)據(jù)幀),可以直接訪問利潤并繪制它。

companies['Profit'].hist( color='g', bins=100);

圖片圖片

可以看到,利潤超過20萬美元的異常值非常少。由此還可以從中推斷出本文的數(shù)據(jù)代表的是具有特定規(guī)模的公司。由于異常值的數(shù)量相對較少,可以將其保留。

特征(支出)直方圖

在這里,本文想看到使用特征的直方圖并查看其分布情況。Y軸表示數(shù)字頻率,X軸表示支出。

companies[[
  "R&D Spend", 
  "Administration", 
  "Marketing Spend"
]].hist(figsize=(16, 20), bins=50, xlabelsize=8, ylabelsize=8)

圖片圖片

還可以看到有一個(gè)健康的分布,只有少量的異常值。根據(jù)直覺,可以預(yù)期在研發(fā)和市場營銷上花費(fèi)更多的公司利潤更高。從下面的散點(diǎn)圖中可以看出,研發(fā)支出和利潤之間存在明顯的相關(guān)性。

profits: DataFrame = companies[["Profit"]]
research_and_development_spending: DataFrame = companies[["R&D Spend"]]

figure, ax = plt.subplots(figsize = (9, 9))
plt.xlabel("R&D Spending")
plt.ylabel("Profits")
ax.scatter(
  research_and_development_spending, 
  profits, 
  s=60, 
  alpha=0.7, 
  edgecolors="k",
  color='g',
  linewidths=0.5
)

圖片圖片

可以通過相關(guān)熱圖進(jìn)一步探索支出和利潤之間的相關(guān)性。從圖中可以看出,研發(fā)和市場營銷支出與利潤的相關(guān)性比行政支出更高。

sns.heatmap(companies.corr())

圖片圖片

5、模型訓(xùn)練

首先需要將數(shù)據(jù)集分割為訓(xùn)練集和測試集兩部分。Sklearn提供了一個(gè)輔助方法來完成這個(gè)任務(wù)。鑒于本文的數(shù)據(jù)集很簡單且足夠小,可以按照以下方式將特征和目標(biāo)分離開來。

數(shù)據(jù)集

features: DataFrame = companies[[
    "R&D Spend", 
    "Administration", 
    "Marketing Spend",
]]
targets: DataFrame = companies[["Profit"]]

train_features, test_features, train_targets, test_targets = train_test_split(
  features, 
  targets,
  test_size=0.2
)

大多數(shù)數(shù)據(jù)科學(xué)家會使用不同的命名約定,如X_train、y_train或其他類似的變體。

模型訓(xùn)練

現(xiàn)在可以創(chuàng)建并訓(xùn)練模型了。Sklearn使事情變得非常簡單。

model: LinearRegression = LinearRegression()
model.fit(train_features, train_targets)

6、模型評估

本文希望對模型的性能及其可用性進(jìn)行評估。首先查看一下計(jì)算得到的系數(shù)。在機(jī)器學(xué)習(xí)中,系數(shù)是用來與每個(gè)特征相乘的學(xué)習(xí)到的權(quán)重或數(shù)值。期望看到每個(gè)特征都有一個(gè)學(xué)習(xí)系數(shù)。

coefficients = model.coef_

"""
We should see the following in our console

Coefficients  [[0.55664299 1.08398919 0.07529883]]
"""

正如上述所看到的,有3個(gè)系數(shù),每個(gè)特征對應(yīng)一個(gè)系數(shù)(“研發(fā)支出”、“行政支出”、“市場營銷支出”)。還可以將其繪制成圖表,以便更直觀地了解每個(gè)系數(shù)。

plt.figure()
plt.barh(train_features.columns, coefficients[0])
plt.show()

圖片圖片

計(jì)算誤差

本文希望了解模型的誤差率,將使用Sklearn的R2得分。

test_predictions: List[float] = model.predict(test_features)
root_squared_error: float = r2_score(test_targets, test_predictions)
"""float
We should see an ouput similar to this
0.9781424529214315
"""

離1越近,模型就越準(zhǔn)確。實(shí)際上可以用一種非常簡單的方式對這一點(diǎn)進(jìn)行測試。

可以取數(shù)據(jù)集的第一行。如果使用下面的支出模型來預(yù)測利潤,期望得到一個(gè)足夠接近192261美元的數(shù)字。

"R&D Spend" |  "Administration" |  "Marketing Spend" | "Profit"
165349.2       136897.8            471784.1            192261.83

接下來創(chuàng)建一個(gè)推理請求。

inference_request: DataFrame = pd.DataFrame([{
  "R&D Spend":165349.2, 
  "Administration":136897.8, 
  "Marketing Spend":471784.1 
}])

運(yùn)行模型。

inference: float = model.predict(inference_request)
"""
We should get a number that is around
199739.88721901
"""

現(xiàn)在可以看到的誤差率是abs(199739-192261)/192261=0.0388。這是非常準(zhǔn)確的。

7、結(jié)論

處理數(shù)據(jù)、搭建模型和分析數(shù)據(jù)有很多方法。沒有一種解決方案適用于所有情況,當(dāng)用機(jī)器學(xué)習(xí)解決業(yè)務(wù)問題時(shí),其中一個(gè)關(guān)鍵過程是搭建多個(gè)旨在解決同一個(gè)問題的模型,并選擇最有前途的模型。


責(zé)任編輯:武曉燕 來源: Python學(xué)研大本營
相關(guān)推薦

2023-05-26 12:45:22

predict?方法數(shù)據(jù)

2018-09-06 08:00:00

深度學(xué)習(xí)TensorFlowPython

2015-07-22 16:16:47

PythonScikit-Lear機(jī)器學(xué)習(xí)

2018-05-15 08:27:20

Scikit-lear機(jī)器學(xué)習(xí)Python

2021-05-12 09:58:09

PythonXGBoostscikit-lear

2018-10-15 09:10:09

Python編程語言數(shù)據(jù)科學(xué)

2023-02-13 15:00:13

機(jī)器學(xué)習(xí)scikit-leaPyTorch

2018-04-06 05:10:04

K-NN數(shù)據(jù)集算法

2020-03-02 17:03:32

深度學(xué)習(xí)人工智能機(jī)器學(xué)習(xí)

2017-11-03 12:57:06

機(jī)器學(xué)習(xí)文本數(shù)據(jù)Python

2018-04-26 08:40:33

線性回歸算法機(jī)器學(xué)習(xí)

2017-07-20 10:23:20

pythonscikit-lear垃圾郵件過濾

2017-04-21 09:59:11

開源機(jī)器學(xué)習(xí)框架

2024-02-01 09:43:32

模型人工智能

2022-04-15 10:11:03

機(jī)器學(xué)習(xí)scikit-lea

2017-01-05 10:07:33

大數(shù)據(jù)TheanoCaffe

2018-11-19 15:06:23

Python算法

2020-09-16 11:10:33

Linux命令文件

2021-12-03 23:14:49

Github插件開發(fā)

2011-04-22 15:55:33

吊頂正投投影機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號