摘要:机器学习本质包含了数学原理推导与实际应用技巧推论事情的方法演绎法和归纳法。同样或者类似的数据放在一起,透过放在一起的数据,分析学习,找到需要知道的答案,称之为非监督式学习。
机器学习本质包含了数学原理推导与实际应用技巧
推论事情的方法:演绎法和归纳法。
根据经验进行推论,就像人成长一样。
基础:
机器学习的目的是:归纳(Induction), 从详细事实到一般推论
找出有效的预测模型
一开始都是从一个简单的模型开始
藉由不断喂入训练数据,修改模型
不断提升预测绩效
机器学习的步骤:
使用者的行为
收集资料
数据转换与清洗
建立模型
验证模型 (建立模型 和 验证模型 之间反复训练与验证)
部署模型
机器学习需要什么?
算法,数据,程序,评估,应用。
应用的方面:
数据挖掘,图像识别,语音和自然语言,统计学习,计算机视觉。
通过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
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 -escikit-learn
scikit-learn官网
机器学习地图:
一定量的样本
classification
clustering
regression
dimensionality reduction
机器学习问题分类
监督式学习
回归分析:连续性数值,使用一组已知对应值的数据产生的模型,预测新数据的对应值。
分类问题:类别标签,根据已知标签的训练数据集,产生一个新模型,用以预测测试数据集的标签。
非监督式学习
降低维度:产生一有最大变异数的字段线性组合,可用来降低原本问题的维度与复杂度
分群问题:物以类聚(近朱者赤,近墨者黑)
利用正确的答案的数据来进行学习,就可以称之为监督式学习。
通过既有的答案来得到新的理论,调整一些演算的过程,建立模型。
同样或者类似的数据放在一起,透过放在一起的数据,分析学习,找到需要知道的答案,称之为非监督式学习。
回归分析线性回归是研究单一因变量与一个或上一个自变量之间的关系
线性回归有两个主要用处:
预测指的是用已观察的变量来预测因变量
因果分析则是将自变量当作因变量发生的原因
线性回归
数学模型:
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()) # 回归模型评估数据
假设显著性标准是0.01
推翻假设的标准是p值 < 0.01 (假设不成立,可以推导出二者变量是密切联系)
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
多变量的计算:
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/42627.html
阅读 1732·2021-10-18 13:30
阅读 2608·2021-10-09 10:02
阅读 2964·2021-09-28 09:35
阅读 2091·2019-08-26 13:39
阅读 3521·2019-08-26 13:36
阅读 1949·2019-08-26 11:46
阅读 1133·2019-08-23 14:56
阅读 1693·2019-08-23 10:38