人工智能项目汇总

项目集

项目一:波斯顿房价预测

项目所需数据集:housing-data.txt

表头解释
CRIM: 城镇人均犯罪率
ZN: 住宅用地所占比例
INDUS: 城镇中非住宅用地所占比例
CHAS: 虚拟变量,用于回归分析
NOX: 环保指数
RM: 每栋住宅的房间数
AGE: 1940 年以前建成的自住单位的比例
DIS: 距离 5 个波士顿的就业中心的加权距离
RAD: 距离高速公路的便利指数
TAX: 每一万美元的不动产税率
PTRATIO: 城镇中的教师学生比例
B: 城镇中的黑人比例
LSTAT: 地区中有多少房东属于低收入人群
MEDV: 自住房屋房价中位数(也就是均价)

普通线性回归

import matplotlib
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.font_manager import FontProperties
from sklearn.linear_model import LinearRegression

# font = FontProperties(fname='/Library/Fonts/Heiti.ttc')

"""导入数据"""
df = pd.read_csv('dataset/housing-data.txt', sep='\s+', header=0)
# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
# print(df.head())

"""特征选择(以MEDV为标记)"""
# 选择三列特征
# RM: 每栋住宅的房间数 MEDV: 自住房屋房价中位数(也就是均价)LSTAT: 地区中有多少房东属于低收入人群
# cols = ['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE', 'DIS', 'RAD', 'TAX', 'PTRATIO', 'B', 'LSTAT', 'MEDV']
# 构造三列特征之间的联系即构造散点图矩阵
cols = ['RM', 'MEDV', 'LSTAT']
sns.pairplot(df[cols], height=3)
plt.tight_layout()
plt.show()

# 关联矩阵
# 求解上述三列特征的相关矩阵
# 对于一般的矩阵X,执行A=corrcoef(X)后,A中每个值的所在行a和列b,反应的是原矩阵X中相应的第a个列向量和第b个列向量的相似程度(即相关系数)
cm = np.corrcoef(df[cols].values.T)
# 控制颜色深浅
sns.set(font_scale=2)
# 构造关联矩阵
hm = sns.heatmap(cm, cbar=True, annot=True, square=True, fmt='.2f', annot_kws={'size': 20}, yticklabels=cols,
                 xticklabels=cols)
plt.show()

"""训练模型"""
X = df[['RM']].values
y = df['MEDV'].values

lr = LinearRegression()
lr.fit(X, y)

plt.scatter(X, y, c='r', s=30, edgecolor='white', label='training data')
plt.plot(X, lr.predict(X), c='g')
plt.xlabel('[MEDV]')
plt.ylabel('[RM]')
plt.title('HousePricePredict')
plt.legend()
plt.show()
print('普通线性回归斜率:{}'.format(lr.coef_[0]))

人工智能项目汇总_第1张图片
人工智能项目汇总_第2张图片
综合散点图矩阵和关联矩阵可得RM和MEDV有明显线性关系,接下来就要根据RM和MEDV的关系进行训练
人工智能项目汇总_第3张图片

多元线性回归

【TIPS】常见问题

读取CSV

  1. read_csv读取时会自动识别表头,数据有表头时不能设置header为空(默认读取第一行,即header=0);数据无表头时,若不设置header,第一行数据会被视为表头,应传入names参数设置表头名称或设置header=None
  2. 长数据完整打印方法
    import numpy as np
    np.set_printoptions(threshold=np.inf)
    
    import pandas as pd
    #显示所有列
    pd.set_option('display.max_columns', None)
    #显示所有行
    pd.set_option('display.max_rows', None)
    #设置value的显示长度为100,默认为50
    pd.set_option('max_colwidth',100)
    
    tensor数据
    将tensor转为list即可。
    tensor数据省略问题,numpy和pandas的设置都是无效的。
    

参考文献

[1] https://www.cnblogs.com/nickchen121/p/11686958.html
[2] https://blog.csdn.net/sinat_32872729/article/details/93025161
[3] https://blog.csdn.net/qq_17753903/article/details/84947089

你可能感兴趣的:(人工智能,人工智能,python)