機器學習本質包含了數學原理推導與實際應用技巧python
推論事情的方法:演繹法和概括法。
根據經驗進行推論,就像人成長同樣。算法
基礎:macos
找出有效的預測模型api
機器學習的步驟:python2.7
機器學習須要什麼?
算法,數據,程序,評估,應用。機器學習
應用的方面:
數據挖掘,圖像識別,語音和天然語言,統計學習,計算機視覺。工具
virtualenv
來建立虛擬環境anaconda
來建立虛擬環境virtualenv
virtualenv
就是用來爲每個項目建立一套「獨立隔離」的Python運行環境的工具學習
pip install virtualenv
建立虛擬環境: virtualenv -p /usr/bin/python2.7 --no-site-packages venvs
啓動虛擬環境: source venvs/bin/activate
退出虛擬環境: deactivate
刪除虛擬環境: rm -r venvs
測試
virtualenv -p /usr/local/bin/python --no-site-packages learn source learn/bin/activate deactivate rm -r learn
能夠一次性經過別的機器上或虛擬環境裏,將文件裏羅列的第三方庫安裝起來:pip install -r requirements.txt
ui
anaconda
安裝anaconda
:anaconda download
# 查看幫助 conda -h # 基於python3.6版本建立一個名字爲python36的環境 conda create --name python36 python=3.6 # 激活此環境 source activate python36 # 再來檢查python版本,顯示是 3.6 python -V # 退出當前環境 source deactivate python36 # 刪除該環境 conda remove -n python36 --all # 或者 conda env remove -n python36 # 查看因此安裝的環境 conda info -e
機器學習地圖:
機器學習問題分類
利用正確的答案的數據來進行學習,就能夠稱之爲監督式學習。
經過既有的答案來獲得新的理論,調整一些演算的過程,創建模型。
一樣或者相似的數據放在一塊兒,透過放在一塊兒的數據,分析學習,找到須要知道的答案,稱之爲非監督式學習。
線性迴歸
數學模型:
y = ax + b # 簡單線性迴歸 y = ax^2 + bx + c # 二項式線性迴歸
最小平方估計法:
找出殘差平方和最小的一條線
繪製資料:
import pandas as pd from matplotlib import pyplot as plt df = pd.read_csv('Data/salary.csv', index_col=0) X = df[['year']] Y = df['salary'].values plt.scatter(X, Y, color='blue') plt.xlabel('year') plt.ylabel('salary') plt.show()
繪製迴歸線:
import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression df = pd.read_csv('Data/salary.csv', index_col=0) X = df[['year']] Y = df['salary'].values plt.scatter(X, Y, color='blue') plt.xlabel('year') plt.ylabel('salary') # 使用scikit-learn進行預測 regr = LinearRegression() regr.fit(X, Y) # 將回歸線繪製在圖上 print('Coefficients:', regr.coef_) # 漲幅 print('Intercept:', regr.intercept_) plt.plot(X, regr.predict(X), color='green', linewidth=3) plt.show()
二次項線性迴歸:
import pandas as pd from matplotlib import pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures df = pd.read_csv('Data/salary.csv', index_col=0) X = df[['year']] Y = df['salary'].values # 使用scikit-learn進行預測 poly_reg = PolynomialFeatures(degree=2) # 二次項 X_ = poly_reg.fit_transform(X) regr = LinearRegression() regr.fit(X_, Y) X2 = X.sort_values(['year']) X2_ = poly_reg.fit_transform(X2) plt.scatter(X, Y, color='blue') plt.plot(X2, regr.predict(X2_), color='green', linewidth=3) plt.xlabel('year') plt.ylabel('salary') # 將回歸線繪製在圖上 print('Coefficients:', regr.coef_) print('Intercept:', regr.intercept_) plt.show()
迴歸模型評估
驗證線性關係是顯著的。
驗證方法經過「假設」
目的:自變量是否有能力去影響自變量。
import pandas as pd from matplotlib import pyplot as plt import statsmodels.api as sm df = pd.read_csv('Data/house-prices.csv') # 創建Dummy Variable s = pd.get_dummies(df['Brick']) # 根據字段中的值,創建新的字段,並新的字段的值爲0或1 # 必須去掉一個字段,去掉的這個字段經過其它一個字段生成。(若是同時存在,會產生共線性問題) t = pd.get_dummies(df['Neighborhood']) # 必須去掉一個字段,去掉的這個字段經過其它二個字段生成。 house = pd.concat([df, s, t], axis=1) del house['No'] del house['West'] del house['Brick'] del house['Neighborhood'] del house['Home'] X = house[['SqFt', 'Bedrooms', 'Bathrooms', 'Offers', 'Yes', 'East', 'North']] Y = house['Price'].values X2 = sm.add_constant(X) est = sm.OLS(Y, X2) est2 = est.fit() print(est2.summary()) # 迴歸模型評估數據
t = 2.658, P(>t)=0.009
, P(0.09) < 0.01
是不成立的,假設也不成立R-squared
: 可做爲自變量預測因變量準確度的指標。 值越大越準確,0.5以上能夠做爲指標。AIC
: 鼓勵數據擬合的優良性可是儘可能避免出現過分擬合的狀況。因此優先考慮的模型應該是AIC
值最小的那一個.
分析房天下的上海徐彙區數據
import pandas as pd import time from sklearn.linear_model import LinearRegression from matplotlib import pyplot as plt import statsmodels.api as sm df = pd.read_excel('Data/house_price_regression.xlsx') # 處理數據 now_year = time.localtime(time.time()).tm_year df['age'] = df['age'].map(lambda e: now_year - int(e.strip().strip('建築年代:')) ) df[['room', 'living_room']] = df['layout'].str.extract(r'(\d+)室(\d+)廳') # 抽取字段, 房間和廳 df['room'] = df['room'].astype(int) df['living_room'] = df['living_room'].astype(int) df['total_floor'] = df['floor_info'].str.extract(r'共(\d+)層') df['total_floor'] = df['total_floor'].astype(int) df['floor'] = df['floor_info'].str.extract(r'^(.)層') df['direction'] = df['direction'].map(lambda e: e.strip()) del df['layout'] del df['floor_info'] del df['title'] del df['url'] # 將values處理成字段 df = pd.concat([df, pd.get_dummies(df['direction']), pd.get_dummies(df['floor'])], axis=1) del df['direction'] del df['floor'] del df['南北向'] del df['低'] # 繪製散佈圖 # 房價 與 平米 df[['price', 'area']].plot(kind='scatter', x='area', y='price', figsize=[10, 5]) # 繪製線性模型 x = df[['area']] y = df['price'] regr = LinearRegression() regr.fit(x, y) print('Coefficent: {}'.format(regr.coef_)) print('Intercept: {}'.format(regr.intercept_)) plt.scatter(x, y, color='blue') plt.plot(x, regr.predict(x), linewidth=2, color='red') plt.xlabel('area') plt.ylabel('price') # 多元迴歸預測 df_col = list(df.columns) del df_col[2] x = df[df_col] y = df['price'] regr = LinearRegression() regr.fit(x, y) print(x.info()) # 評估迴歸模型 x2 = sm.add_constant(x) est = sm.OLS(y, x2) est2 = est.fit() print(est2.summary()) plt.show()
監督式學習
分類問題:根據已知標籤的訓練數據集,產生一個新模型,用以預測測試數據集的標籤
決策樹:
單一變量的計算:
Entropy = -p * log * p - q * log * q
多變量的計算: