机器学习本质包含了数学原理推导与实际应用技巧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
多变量的计算: