欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python編程實現(xiàn)使用線性回歸預(yù)測數(shù)據(jù)

 更新時間:2017年12月07日 10:22:41   作者:toolate  
這篇文章主要介紹了Python編程實現(xiàn)使用線性回歸預(yù)測數(shù)據(jù),具有一定借鑒價值,需要的朋友可以了解下。

本文中,我們將進(jìn)行大量的編程——但在這之前,我們先介紹一下我們今天要解決的實例問題。

1) 預(yù)測房子價格

房價大概是我們中國每一個普通老百姓比較關(guān)心的問題,最近幾年保障啊,小編這點微末工資著實有點受不了。

我們想預(yù)測特定房子的價值,預(yù)測依據(jù)是房屋面積。

2) 預(yù)測下周哪個電視節(jié)目會有更多的觀眾

閃電俠和綠箭俠是我最喜歡的電視節(jié)目,特別是綠箭俠,當(dāng)初追的昏天黑地的,不過后來由于一些原因,沒有接著往下看。我想看看下周哪個節(jié)目會有更多的觀眾。

3) 替換數(shù)據(jù)集中的缺失值

我們經(jīng)常要和帶有缺失值的數(shù)據(jù)集打交道。這部分沒有實戰(zhàn)例子,不過我會教你怎么去用線性回歸替換這些值。

所以,讓我們投入編程吧(馬上)

在動手之前,去把我以前的文章(Python Packages for Data Mining)中的程序包安裝了是個好主意。

1) 預(yù)測房子價格

我們有下面的數(shù)據(jù)集:

輸入編號 平方英尺 價格
1 150 6450
2 200 7450
3 250 8450
4 300 9450
5 350 11450
6 400 15450
7 600 18450

步驟:

在線性回歸中,我們都知道必須在數(shù)據(jù)中找出一種線性關(guān)系,以使我們可以得到θ0和θ1。 我們的假設(shè)方程式如下所示:

其中: hθ(x)是關(guān)于特定平方英尺的價格值(我們要預(yù)測的值),(意思是價格是平方英尺的線性函數(shù)); θ0是一個常數(shù); θ1是回歸系數(shù)。

那么現(xiàn)在開始編程:

步驟1

打開你最喜愛的文本編輯器,并命名為predict_house_price.py。 我們在我們的程序中要用到下面的包,所以把下面代碼復(fù)制到predict_house_price.py文件中去。

# Required Packages
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model

運行一下你的代碼。如果你的程序沒錯,那步驟1基本做完了。如果你遇到了某些錯誤,這意味著你丟失了一些包,所以回頭去看看包的頁面。 安裝博客文章中所有的包,再次運行你的代碼。這次希望你不會遇到任何問題。

現(xiàn)在你的程序沒錯了,我們繼續(xù)……

步驟2

我把數(shù)據(jù)存儲成一個.csv文件,名字為input_data.csv 所以讓我們寫一個函數(shù)把數(shù)據(jù)轉(zhuǎn)換為X值(平方英尺)、Y值(價格)

# Function to get data
def get_data(file_name):
 data = pd.read_csv(file_name)
 X_parameter = []
 Y_parameter = []
 for single_square_feet ,single_price_value in zip(data['square_feet'],data['price']):
    X_parameter.append([float(single_square_feet)])
    Y_parameter.append(float(single_price_value))
 return X_parameter,Y_parameter

第3行:將.csv數(shù)據(jù)讀入Pandas數(shù)據(jù)幀。

第6-9行:把Pandas數(shù)據(jù)幀轉(zhuǎn)換為X_parameter和Y_parameter數(shù)據(jù),并返回他們。

所以,讓我們把X_parameter和Y_parameter打印出來:

[[150.0], [200.0], [250.0], [300.0], [350.0], [400.0], [600.0]]
[6450.0, 7450.0, 8450.0, 9450.0, 11450.0, 15450.0, 18450.0]
[Finished in 0.7s]

腳本輸出: [[150.0], [200.0], [250.0], [300.0], [350.0], [400.0], [600.0]] [6450.0, 7450.0, 8450.0, 9450.0, 11450.0, 15450.0, 18450.0] [Finished in 0.7s]

步驟3

現(xiàn)在讓我們把X_parameter和Y_parameter擬合為線性回歸模型。我們要寫一個函數(shù),輸入為X_parameters、Y_parameter和你要預(yù)測的平方英尺值,返回θ0、θ1和預(yù)測出的價格值。

# Function for Fitting our data to Linear model
def linear_model_main(X_parameters,Y_parameters,predict_value):
 
 # Create linear regression object
 regr = linear_model.LinearRegression()
 regr.fit(X_parameters, Y_parameters)
 predict_outcome = regr.predict(predict_value)
 predictions = {}
 predictions['intercept'] = regr.intercept_
 predictions['coefficient'] = regr.coef_
 predictions['predicted_value'] = predict_outcome
 return predictions

第5-6行:首先,創(chuàng)建一個線性模型,用我們的X_parameters和Y_parameter訓(xùn)練它。

第8-12行:我們創(chuàng)建一個名稱為predictions的字典,存著θ0、θ1和預(yù)測值,并返回predictions字典為輸出。

所以讓我們調(diào)用一下我們的函數(shù),要預(yù)測的平方英尺值為700。

X,Y = get_data('input_data.csv')
predictvalue = 700
result = linear_model_main(X,Y,predictvalue)
print "Intercept value " , result['intercept']
print "coefficient" , result['coefficient']
print "Predicted value: ",result['predicted_value']

腳本輸出:Intercept value 1771.80851064 coefficient [ 28.77659574] Predicted value: [ 21915.42553191] [Finished in 0.7s]

這里,Intercept value(截距值)就是θ0的值,coefficient value(系數(shù))就是θ1的值。 我們得到預(yù)測的價格值為21915.4255——意味著我們已經(jīng)把預(yù)測房子價格的工作做完了!

為了驗證,我們需要看看我們的數(shù)據(jù)怎么擬合線性回歸。所以我們需要寫一個函數(shù),輸入為X_parameters和Y_parameters,顯示出數(shù)據(jù)擬合的直線。

# Function to show the resutls of linear fit model
def show_linear_line(X_parameters,Y_parameters):
 # Create linear regression object
 regr = linear_model.LinearRegression()
 regr.fit(X_parameters, Y_parameters)
 plt.scatter(X_parameters,Y_parameters,color='blue')
 plt.plot(X_parameters,regr.predict(X_parameters),color='red',linewidth=4)
 plt.xticks(())
 plt.yticks(())
 plt.show()

那么調(diào)用一下show_linear_line函數(shù)吧:

show_linear_line(X,Y)

腳本輸出:

2)預(yù)測下周哪個電視節(jié)目會有更多的觀眾

閃電俠是一部由劇作家/制片人Greg Berlanti、Andrew Kreisberg和Geoff Johns創(chuàng)作,由CW電視臺播放的美國電視連續(xù)劇。它基于DC漫畫角色閃電俠(Barry Allen),一個具有超人速度移動能力的裝扮奇特的打擊犯罪的超級英雄,這個角色是由Robert Kanigher、John Broome和Carmine Infantino創(chuàng)作。它是綠箭俠的衍生作品,存在于同一世界。該劇集的試播篇由Berlanti、Kreisberg和Johns寫作,David Nutter執(zhí)導(dǎo)。該劇集于2014年10月7日在北美首映,成為CW電視臺收視率最高的電視節(jié)目。

綠箭俠是一部由劇作家/制片人 Greg Berlanti、Marc Guggenheim和Andrew Kreisberg創(chuàng)作的電視連續(xù)劇。它基于DC漫畫角色綠箭俠,一個由Mort Weisinger和George Papp創(chuàng)作的裝扮奇特的犯罪打擊戰(zhàn)士。它于2012年10月10日在北美首映,與2012年末開始全球播出。主要拍攝于Vancouver、British Columbia、Canada,該系列講述了億萬花花公子Oliver Queen,由Stephen Amell扮演,被困在敵人的島嶼上五年之后,回到家鄉(xiāng)打擊犯罪和腐敗,成為一名武器是弓箭的神秘義務(wù)警員。不像漫畫書中,Queen最初沒有使用化名”綠箭俠“。

由于這兩個節(jié)目并列為我最喜愛的電視節(jié)目頭銜,我一直想知道哪個節(jié)目更受其他人歡迎——誰會最終贏得這場收視率之戰(zhàn)。 所以讓我們寫一個程序來預(yù)測哪個電視節(jié)目會有更多觀眾。 我們需要一個數(shù)據(jù)集,給出每一集的觀眾。幸運地,我從維基百科上得到了這個數(shù)據(jù),并整理成一個.csv文件。它如下所示。

閃電俠 閃電俠美國觀眾數(shù) 綠箭俠 綠箭俠美國觀眾數(shù)
1 4.83 1 2.84
2 4.27 2 2.32
3 3.59 3 2.55
4 3.53 4 2.49
5 3.46 5 2.73
6 3.73 6 2.6
7 3.47 7 2.64
8 4.34 8 3.92
9 4.66 9 3.06

觀眾數(shù)以百萬為單位。

解決問題的步驟:

首先我們需要把數(shù)據(jù)轉(zhuǎn)換為X_parameters和Y_parameters,不過這里我們有兩個X_parameters和Y_parameters。因此,把他們命名為flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter吧。然后我們需要把數(shù)據(jù)擬合為兩個不同的線性回歸模型——先是閃電俠,然后是綠箭俠。 接著我們需要預(yù)測兩個電視節(jié)目下一集的觀眾數(shù)量。 然后我們可以比較結(jié)果,推測哪個節(jié)目會有更多觀眾。

步驟1

導(dǎo)入我們的程序包:

# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model

步驟2

寫一個函數(shù),把我們的數(shù)據(jù)集作為輸入,返回flash_x_parameter、flash_y_parameter、arrow_x_parameter、arrow_y_parameter values。

# Function to get data
def get_data(file_name):
 data = pd.read_csv(file_name)
 flash_x_parameter = []
 flash_y_parameter = []
 arrow_x_parameter = []
 arrow_y_parameter = []
 for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
 flash_x_parameter.append([float(x1)])
 flash_y_parameter.append(float(y1))
 arrow_x_parameter.append([float(x2)])
 arrow_y_parameter.append(float(y2))
 return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter

現(xiàn)在我們有了我們的參數(shù),來寫一個函數(shù),用上面這些參數(shù)作為輸入,給出一個輸出,預(yù)測哪個節(jié)目會有更多觀眾。

# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
 regr1 = linear_model.LinearRegression()
 regr1.fit(x1, y1)
 predicted_value1 = regr1.predict(9)
 print predicted_value1
 regr2 = linear_model.LinearRegression()
 regr2.fit(x2, y2)
 predicted_value2 = regr2.predict(9)
 #print predicted_value1
 #print predicted_value2
 if predicted_value1 > predicted_value2:
 print "The Flash Tv Show will have more viewers for next week"
 else:
 print "Arrow Tv Show will have more viewers for next week"

把所有東西寫在一個文件中。打開你的編輯器,把它命名為prediction.py,復(fù)制下面的代碼到prediction.py中。

# Required Packages
import csv
import sys
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import datasets, linear_model
 
# Function to get data
def get_data(file_name):
 data = pd.read_csv(file_name)
 flash_x_parameter = []
 flash_y_parameter = []
 arrow_x_parameter = []
 arrow_y_parameter = []
 for x1,y1,x2,y2 in zip(data['flash_episode_number'],data['flash_us_viewers'],data['arrow_episode_number'],data['arrow_us_viewers']):
 flash_x_parameter.append([float(x1)])
 flash_y_parameter.append(float(y1))
 arrow_x_parameter.append([float(x2)])
 arrow_y_parameter.append(float(y2))
 return flash_x_parameter,flash_y_parameter,arrow_x_parameter,arrow_y_parameter
 
# Function to know which Tv show will have more viewers
def more_viewers(x1,y1,x2,y2):
 regr1 = linear_model.LinearRegression()
 regr1.fit(x1, y1)
 predicted_value1 = regr1.predict(9)
 print predicted_value1
 regr2 = linear_model.LinearRegression()
 regr2.fit(x2, y2)
 predicted_value2 = regr2.predict(9)
 #print predicted_value1
 #print predicted_value2
 if predicted_value1 > predicted_value2:
 print "The Flash Tv Show will have more viewers for next week"
 else:
 print "Arrow Tv Show will have more viewers for next week"
 
x1,y1,x2,y2 = get_data('input_data.csv')
#print x1,y1,x2,y2
more_viewers(x1,y1,x2,y2)

可能你能猜出哪個節(jié)目會有更多觀眾——但運行一下這個程序看看你猜的對不對。

3) 替換數(shù)據(jù)集中的缺失值

有時候,我們會遇到需要分析包含有缺失值的數(shù)據(jù)的情況。有些人會把這些缺失值舍去,接著分析;有些人會用最大值、最小值或平均值替換他們。平均值是三者中最好的,但可以用線性回歸來有效地替換那些缺失值。

這種方法差不多像這樣進(jìn)行。

首先我們找到我們要替換那一列里的缺失值,并找出缺失值依賴于其他列的哪些數(shù)據(jù)。把缺失值那一列作為Y_parameters,把缺失值更依賴的那些列作為X_parameters,并把這些數(shù)據(jù)擬合為線性回歸模型?,F(xiàn)在就可以用缺失值更依賴的那些列預(yù)測缺失的那一列。

一旦這個過程完成了,我們就得到了沒有任何缺失值的數(shù)據(jù),供我們自由地分析數(shù)據(jù)。

為了練習(xí),我會把這個問題留給你,所以請從網(wǎng)上獲取一些缺失值數(shù)據(jù),解決這個問題。一旦你完成了請留下你的評論。我很想看看你的結(jié)果。

個人小筆記:

我想分享我個人的數(shù)據(jù)挖掘經(jīng)歷。記得在我的數(shù)據(jù)挖掘引論課程上,教師開始很慢,解釋了一些數(shù)據(jù)挖掘可以應(yīng)用的領(lǐng)域以及一些基本概念。然后突然地,難度迅速上升。這令我的一些同學(xué)感到非常沮喪,被這個課程嚇到,終于扼殺了他們對數(shù)據(jù)挖掘的興趣。所以我想避免在我的博客文章中這樣做。我想讓事情更輕松隨意。因此我嘗試用有趣的例子,來使讀者更舒服地學(xué)習(xí),而不是感到無聊或被嚇到。

總結(jié)

以上就是本文關(guān)于Python編程實現(xiàn)使用線性回歸預(yù)測數(shù)據(jù)的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:

python編程線性回歸代碼示例

Python語言描述最大連續(xù)子序列和

Python實現(xiàn)字符串匹配算法代碼示例

如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • python boto和boto3操作bucket的示例

    python boto和boto3操作bucket的示例

    這篇文章主要介紹了python boto和boto3操作bucket的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-10-10
  • Python下調(diào)用Linux的Shell命令的方法

    Python下調(diào)用Linux的Shell命令的方法

    有時候難免需要直接調(diào)用Shell命令來完成一些比較簡單的操作,這篇文章主要介紹了Python下調(diào)用Linux的Shell命令的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • python實現(xiàn)帶錯誤處理功能的遠(yuǎn)程文件讀取方法

    python實現(xiàn)帶錯誤處理功能的遠(yuǎn)程文件讀取方法

    這篇文章主要介紹了python實現(xiàn)帶錯誤處理功能的遠(yuǎn)程文件讀取方法,涉及Python使用socket操作遠(yuǎn)程文件的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • Python Scrapy?框架簡單介紹

    Python Scrapy?框架簡單介紹

    Scrapy是適用于Python的一個快速、高層次的屏幕抓取和web抓取框架,用于抓取web站點并從頁面中提取結(jié)構(gòu)化的數(shù)據(jù),這篇文章主要介紹了Scrapy框架優(yōu)點及簡單介紹,需要的朋友可以參考下
    2023-05-05
  • 8個python新手入門項目

    8個python新手入門項目

    文將介紹8個帶有代碼的Python項目,這些項目將幫助大家增強(qiáng)編程能力,這些項目涵蓋了各種主題和難度級別,助力大家成長為一個Python開發(fā)者
    2024-01-01
  • Python搭建Spark分布式集群環(huán)境

    Python搭建Spark分布式集群環(huán)境

    這篇文章主要介紹了Spark分布式集群環(huán)境搭建基于Python版,Apache Spark 是一個新興的大數(shù)據(jù)處理通用引擎,提供了分布式的內(nèi)存抽象。100 倍本文而是使用三臺電腦來搭建一個小型分布式集群環(huán)境安裝,需要的朋友可以參考下
    2019-07-07
  • DataFrame如何找出有空值的行

    DataFrame如何找出有空值的行

    這篇文章主要介紹了DataFrame如何找出有空值的行問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 一篇文章帶你了解python迭代器和生成器

    一篇文章帶你了解python迭代器和生成器

    這篇文章主要介紹了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-08-08
  • django自帶的server 讓外網(wǎng)主機(jī)訪問方法

    django自帶的server 讓外網(wǎng)主機(jī)訪問方法

    今天小編就為大家分享一篇django自帶的server 讓外網(wǎng)主機(jī)訪問方法。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • python 實現(xiàn)rolling和apply函數(shù)的向下取值操作

    python 實現(xiàn)rolling和apply函數(shù)的向下取值操作

    這篇文章主要介紹了python 實現(xiàn)rolling和apply函數(shù)的向下取值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06

最新評論