tensorflow入门(一)波士顿房价数据集
Keras
Keras 是基于 Theano 或 TensorFlow 的一個深度學(xué)習(xí)框架,它的設(shè)計參考了 Torch,用 Python 語言編寫,是一個高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,支持 GPU 和 CPU。
它可以快速搭建神經(jīng)網(wǎng)絡(luò)模型,非常易于調(diào)試和擴展。TensorFlow的官方API內(nèi)置了一些常用的公共數(shù)據(jù)集,可以通過keras.datasets模塊加載和訪問。
Keras中集成的數(shù)據(jù)集
| 1 | boston_housing | 波士頓房價數(shù)據(jù)集 |
| 2 | CIFAR10 | 10種類別的圖片集 |
| 3 | CIFAR100 | 100種類別的圖片集 |
| 4 | MNIST | 手寫數(shù)字圖片集 |
| 5 | Fashion-MNIST | 10種時尚類別的圖片集 |
| 6 | IMDB | 電影點評數(shù)據(jù)集 |
| 7 | reuters | 路透社新聞數(shù)據(jù)集 |
波士頓房價數(shù)據(jù)集
卡內(nèi)基梅隆大學(xué),StatLib庫,1978年,涵蓋了麻省波士頓的506個不同郊區(qū)的房屋數(shù)據(jù)。
404條訓(xùn)練數(shù)據(jù)集,102條測試數(shù)據(jù)集。
每條數(shù)據(jù)14個字段,包含13個屬性,和一個房價的平均值。
加載數(shù)據(jù)集
在使用數(shù)據(jù)集之前,首先要加載數(shù)據(jù)集。這個數(shù)據(jù)集完整的前tensorflow.keras.datasets。tensorflow.keras是kerasApi在tensorflow的實現(xiàn)。
為了簡化編程,我們首先給他起一個更為簡短的名字,然后使用這個數(shù)據(jù)集對象的load_data()方法加載數(shù)據(jù)集。
數(shù)據(jù)集下載提示
在第一次運行這條語句時,本地磁盤中沒有這個數(shù)據(jù)集會自動通過網(wǎng)絡(luò)下載,這時會出現(xiàn)下載提示信息,顯示下載地址和進度。
本地默認路徑
在windows操作系統(tǒng)下,這個數(shù)據(jù)集下載后,被保存在c盤中的C:\users\user_name\.keras\datasets文件夾中。其中這個user_name是當前操作系統(tǒng)用戶名。如果是使用管理員administrator的身份登錄windows系統(tǒng),這個數(shù)據(jù)集文件的名稱是boston_housing.npz
輸出數(shù)據(jù)集
由于這個數(shù)據(jù)集中的數(shù)據(jù)被劃分成了訓(xùn)練集和測試集,其中每條數(shù)據(jù)又包括房屋的屬性值和房價,因此需要使用4個numpy數(shù)組分別接收這些返回值。
這里返回值train_x和train_y,分別用來接收訓(xùn)練數(shù)據(jù)集的屬性和房價,test_x和test_y分別接收測試數(shù)據(jù)集的屬性和房價。
import tensorflow as tf boston_housing = tf.keras.datasets.boston_housing (train_x, train_y), (text_x, text_y) = boston_housing.load_data(test_split=0.2) print("Training set:", len(train_x)) print("Testing set:", len(text_x))
下面我們使用len()函數(shù)來看一下訓(xùn)練集合測試集中數(shù)據(jù)的條數(shù)。
這是運行的結(jié)果:
可以看到訓(xùn)練集中有404條數(shù)據(jù),測試集中有102條數(shù)據(jù),這是波士頓數(shù)據(jù)集中默認的劃分。如果想改變這個劃分比例,可以在加載數(shù)據(jù)及時,通過設(shè)置數(shù)據(jù)集對象的.load_data()方法中的test_split參數(shù)來實現(xiàn)。
這個參數(shù)是設(shè)置測試數(shù)據(jù),在整個數(shù)據(jù)集中的比例默認為0.2,也就是說測試數(shù)據(jù)占整個數(shù)據(jù)集的1/5,在這個數(shù)據(jù)集中一共有506條數(shù)據(jù),1/5也就是102條。
改變數(shù)據(jù)集劃分比例
在這節(jié)課的例子中,我們不需要測試及提取出全部數(shù)據(jù)作為訓(xùn)練集,因此設(shè)置這個參數(shù)的值為0,再分別輸出訓(xùn)練集和測試集中數(shù)據(jù)的條數(shù)。
import tensorflow as tf boston_housing = tf.keras.datasets.boston_housing (train_x, train_y), (text_x, text_y) = boston_housing.load_data(test_split=0) print("Training set:", len(train_x)) print("Testing set:", len(text_x))運行結(jié)果:
從運行結(jié)果可以看到所有的506條數(shù)據(jù)都作為了訓(xùn)練數(shù)據(jù),測試數(shù)據(jù)的數(shù)量為0。
訪問數(shù)據(jù)集中的數(shù)據(jù)
我們輸出train_x和train_y的數(shù)據(jù)類型,可以看到它們都是numpy數(shù)組。
type(train_x) <class 'numpy.ndarray'> type(train_y) <class 'numpy.ndarray'>再輸出它們的為數(shù)和形狀
print("維度", train_x.ndim) 維度 2 print("形狀", train_x.shape) 形狀 (506, 13)print("維度", train_y.ndim) 維度 1 print("形狀", train_y.shape) 形狀 (506,)可以看到train_x是二維數(shù)組,形狀是506,13,train_y是一維數(shù)組,形狀是506。
我們可以通過numpy數(shù)組的索引和切片來查看指定的數(shù)據(jù),例如中的前5行數(shù)據(jù)
print(train_x[0:5]) [[1.23247e+00 0.00000e+00 8.14000e+00 0.00000e+00 5.38000e-01 6.14200e+009.17000e+01 3.97690e+00 4.00000e+00 3.07000e+02 2.10000e+01 3.96900e+021.87200e+01][2.17700e-02 8.25000e+01 2.03000e+00 0.00000e+00 4.15000e-01 7.61000e+001.57000e+01 6.27000e+00 2.00000e+00 3.48000e+02 1.47000e+01 3.95380e+023.11000e+00][4.89822e+00 0.00000e+00 1.81000e+01 0.00000e+00 6.31000e-01 4.97000e+001.00000e+02 1.33250e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.75520e+023.26000e+00][3.96100e-02 0.00000e+00 5.19000e+00 0.00000e+00 5.15000e-01 6.03700e+003.45000e+01 5.98530e+00 5.00000e+00 2.24000e+02 2.02000e+01 3.96900e+028.01000e+00][3.69311e+00 0.00000e+00 1.81000e+01 0.00000e+00 7.13000e-01 6.37600e+008.84000e+01 2.56710e+00 2.40000e+01 6.66000e+02 2.02000e+01 3.91430e+021.46500e+01]]可以看到結(jié)果,是一個二維數(shù)組。第一維中的每個元素對應(yīng)于一條房屋信息數(shù)據(jù),每條數(shù)據(jù),包括13個屬性。
輸出train_x中的某一列數(shù)據(jù)
如果我們希望提取出其中的某一個屬性,也就是讀出某一列數(shù)據(jù),可以在第二維上指定索引值,例如要顯示所有數(shù)據(jù)中的平均房間數(shù)這個屬性,可以這樣寫
print(train_x[:,5]) [6.142 7.61 4.97 6.037 6.376 5.708 5.536 5.468 5.628 5.019 6.404 4.6285.572 6.251 5.613 5.957 7.016 6.345 6.162 6.727 6.202 6.595 7.135 6.5755.895 6.794 6.012 7.185 5.813 5.569 6.315 6.297 6.301 5.935 7.024 6.4155.599 5.701 6.041 6.279 5.454 6.211 6.316 6.411 5.887 5.924 5.822 6.6746.842 5.713 5.968 6.461 7.358 6.565 5.88 5.87 6.348 6.193 6.854 6.5466.004 6.538 6.185 5.836 6.525 6.436 5.757 5.818 5.852 5.404 5.682 6.6297.178 5.914 6.096 5.631 5.896 5.637 5.966 5.403 6.678 7.47 5.456 6.4536.372 6.31 6.405 7.853 4.926 6.103 6.75 8.034 6.009 7.765 8.069 6.3586.975 6.015 6.8 6.43 7.645 8.337 6.113 6.77 5.757 6.487 6.162 6.0695.565 5.96 6.229 7.929 6.715 5.39 6.383 7.147 6.006 6.004 5.928 5.9366.315 5.727 6.152 7.454 6.968 5.95 6.232 6.951 7.014 6.49 5.786 5.7317.412 6.782 5.67 5.879 6.545 8.704 5.927 5.683 5.399 6.474 6.193 6.3266.976 6.433 6.762 6.167 6.657 6.431 5.936 6.939 6.163 6.03 5.891 5.4045.531 6.481 3.863 5.807 6.226 7.007 6.495 7.691 6.516 5.608 6.059 6.3936.727 5.983 6.549 6.416 5.905 5.663 5.889 6.454 6.824 6.169 6.13 6.4566.219 5.92 7.163 6.739 5.874 4.368 6.021 6.023 6.382 6.373 6.047 8.3985.859 7.42 5.856 5.57 7.088 6.38 5.998 5.933 6.619 4.903 6.606 5.565.965 6.484 6.749 6.083 5.872 5.707 5.604 6.728 6.579 6.319 5.52 6.4825.85 5.851 6.51 6.567 7.393 5.39 5.961 5.834 6.398 6.998 6.861 6.2096.066 3.561 6.982 5.693 5.888 8.247 6.442 6.635 5.272 5.976 6.112 7.3135.012 4.652 6.086 6.254 6.164 5.869 7.267 6.051 5.453 5.926 5.713 6.4026.223 6.649 5.155 6.129 6.095 6.86 5.617 7.148 7.82 5.186 6.02 7.0416.405 6.431 5.875 7.274 6.23 6.211 6.152 6.302 6.849 6.312 6.286 6.4267.327 6.718 5.594 7.155 5.99 5.344 5.349 6.696 5.935 4.906 5.277 6.2086.406 6.266 6.216 6.425 6.127 6.12 5.986 6.249 7.206 5.747 6.871 5.8544.963 5.856 5.888 6.144 6.341 6.096 7.287 5.762 5.963 6.816 6.438 5.7876.065 6.782 8.266 6.027 6.092 8.725 7.875 6.317 6.167 5.875 5.898 5.3626.137 6.943 5.949 6.115 5.427 6.54 6.389 5.871 6.552 6.145 5.803 6.1747.203 7.236 5.627 5.794 5.741 6.003 6.726 6.618 8.375 7.489 6.59 4.1388.04 7.923 5.854 6.14 6.29 6.63 6.683 5.868 6.127 6.333 6.655 6.1956.458 7.82 5.972 7.416 5.759 5.783 7.241 6.794 5.706 5.952 6.377 4.9736.631 5.412 6.642 6.98 6.417 6.701 6.511 6.556 6.122 5.942 6.335 7.1076.014 5.966 6.251 6.781 7.079 5.857 5.304 6.064 6.312 6.081 6.212 4.5196.459 6.326 4.138 5.602 6.24 6.031 5.709 6.604 6.434 5.913 5.985 6.256.121 5.926 6.874 6.167 5.961 6.437 6.405 6.072 6.151 7.831 5.648 6.1086.417 6.144 6.114 6.127 5.304 5.837 5.841 5.605 5.876 6.242 6.879 6.7286.38 5.878 6.176 6.833 6.826 6.245 5.713 5. 5.597 5.877 5.983 6.6357.104 6.625 6.185 7.686 6.563 6.153 6.616 5.782 6.513 6.182 7.249 5.795.036 5.813 7.185 6.63 6.343 8.297 6.758 6.421 6.98 6.471 6.852 6.0196.376 6.108 6.417 6.209 5.093 5.987 6.395 6.957 6.229 5.414 6.495 6.0095.885 6.375 6.968 4.88 5.981 7.52 5.593 6.485 5.705 6.172 6.229 5.9516.593 7.061 6.03 5.884 6.897 8.259 6.812 6.122 7.333 8.78 6.273 7.8026.951 6.101]這表示第1維取出全部數(shù)據(jù),第2維取出索引值為5的屬性。
可以看到返回了一個一維數(shù)組,其中有506個數(shù)值,分別是每條數(shù)據(jù)中的平均房間數(shù)。
這里再輸出train_y中的數(shù)據(jù)
可以看到結(jié)果,也是一個一維數(shù)組,其中包含506個數(shù)據(jù),分別對于每條房屋信息數(shù)據(jù)中的房價。
波士頓房價數(shù)據(jù)集可視化
在波士頓房價數(shù)據(jù)集中每條房屋信息中有13條屬性,有些明顯的對房價有直接的影響,例如住宅的平均房間數(shù)。顯然,房間數(shù)越多房價越高。而有一些屬性與房價的關(guān)系,好像不是那么直接。
為了找出影響房價的主要因素,我們可以借助于數(shù)據(jù)可視化的方法。最直觀的可視化方法就是利用散點圖,把每一個屬性與房價的關(guān)系表示出來。
平均房間數(shù)與房價之間的關(guān)系
例如要展現(xiàn)平均房間數(shù)與房價之間的關(guān)系,只要將橫坐標作為房間數(shù)縱坐標作為房價,繪制散點圖就可以了。
import tensorflow as tf import matplotlib.pyplot as pltboston_housing = tf.keras.datasets.boston_housing (train_x, train_y), (_, _) = boston_housing.load_data(test_split=0)# 設(shè)置繪圖尺寸 plt.figure(figsize=(5, 5)) # 繪制散點圖 plt.scatter(train_x[:, 5], train_y) # 設(shè)置x軸標簽文本 plt.xlabel("RM") # 設(shè)置y軸標簽文本 plt.ylabel("Price($1000's)") # 設(shè)置標題 plt.title("5. RM-Price") # 顯示繪圖 plt.show()
這是運行的結(jié)果,可以看出來平均房間數(shù)和房價之間的關(guān)系,整體是趨于這樣的規(guī)律,房間數(shù)量越多房價越高,這和我們平時的認知是一致的。
所有屬性與房價之間的關(guān)系
下面我們可以采用相同的方法,繪制出其他12個屬性和房價之間的關(guān)系,但是如果把這段代碼拷貝12遍,然后再逐一修改其中的橫坐標取值,這樣做顯然有點太笨了。對于這個問題我們很容易想到可以使用循環(huán)語句來實現(xiàn)循環(huán)執(zhí)行13次,每次取出一個屬性作為橫坐標的值就可以了。
首先看一下我們希望得到的運行結(jié)果,這是一張全家福,把所有的屬性和房價之間的關(guān)系繪制在同一張圖中,這樣做比較直觀,更方便觀察、比較和管理。
為了放置這13個屬性,我們需要把整個繪圖區(qū)域劃分為4×4的子圖,在前面的13個子圖中分別繪制每個屬性的散點圖,因為循環(huán)次數(shù)已知,因此我們使用for循環(huán)來實現(xiàn)這13個子圖的繪制。
for i in range(13):plt.subplot(4, 4, i+1)plt.scatter(train_x[:,i], train_y)循環(huán)次數(shù)為13循環(huán)變量I從0開始依次增大,直到i=12時循環(huán)結(jié)束。
在循環(huán)體中每次繪制一個子圖,前兩個參數(shù)表示,整個畫布被劃分為4×4的區(qū)域,最后這個參數(shù)是當前這次循環(huán)所創(chuàng)建的子圖序號,因為子圖序號是從1開始的,因此要給循環(huán)變量I+1,然后在這個子圖上繪制散點圖。橫坐標取第i個屬性值,縱坐標是房價。
執(zhí)行這個for循環(huán)語句就可以完成對所有屬性的散點圖的繪制。這里加上一條設(shè)置畫布尺寸,然后使用show()方法顯示繪圖
這是運行結(jié)果,可以看到13個屬性分別在13個子圖中繪制出來了。
添加坐標軸標簽和標題
下面我們給它們分別加上坐標軸和標題。
首先將所有屬性的名稱放在一個一維列表中,然后在循環(huán)體中每次取出索引值為i的元素,作為當前子圖中x坐標軸的標簽,所有子圖中的y坐標軸標簽都是房價。
子圖標題是由x軸標簽和y軸標簽共同組成的字符串,前面這個序號是子圖序號取循環(huán)變量i的值加一,在這個for循環(huán)中最重要的就是注意循環(huán)變量索引值和子圖序號的關(guān)系。
這是行結(jié)果??梢钥闯鰜?#xff0c;有些屬性和房價之間存在著比較明顯的關(guān)系,例如一氧化碳濃度,平均房間數(shù),低收入人口的比例,而其他一些屬性對房價好像沒有明顯的影響,例如是否有河流穿過商業(yè)用地的比例等。
通過這樣的數(shù)據(jù)可視化可以幫助我們更加直觀快速的讀懂數(shù)據(jù)之間的關(guān)系,為后續(xù)的數(shù)據(jù)處理和分析提供基礎(chǔ)
總結(jié)
以上是生活随笔為你收集整理的tensorflow入门(一)波士顿房价数据集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跟几位大佬共进晚餐
- 下一篇: 对比一段ADC键值读取的代码