决策树波士顿房价预测代码难点笔记
关于中文字体不能正常显示问题:
采用matplotlib作图时默认设置下是无法显示中文的,凡是汉字都会显示成小方块。
实际上,matplotlib是支持unicode编码的,不能正常显示汉字主要是没有找到合适的中文字体,在matplotlib的配置文件C:\Python34\Lib\site-packages\matplotlib\mpl-data\matplotlibrc中,可以看到字体的默认设置如下:
#font.family : sans-serif
#font.sans-serif : Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
可以看到,其中并没有中文字体,所以我们只要手动添加中文字体的名称就可以了。不过添加的名称并不是普通的名称,python有个字体管理器,font_manager.py,它会生成一个文件:fontList.cache(我的是在这个路径下:C:\Users\Administrator\.matplotlib);里面包含着True Type字体(.ttf文件)与Python中相应字体的对应名称,黑体simhei.ttf (windows中的字体文件)对应的名称是: “SimHei’’;楷体simkai.ttf对应的名称为’KaiTi’。你想要让汉字显示成什么字体,在其中查找对应的名称就可以了。
有两种方法添加“SimHei’’,’KaiTi_GB2312’等中文字体名称:
1. 直接修改配置文件matplotlibrc
在配置文件中找到font.sans-serif的设置,然后添加需要的中文字体名称,例如:
font.sans-serif : SimHei, Bitstream Vera Sans, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
2. 动态设置(推荐方式)
在python脚本中动态设置matplotlibrc,这样不需要更改配置文件,方便灵活,例如:
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
由于更改了字体导致显示不出负号,在配置文件中我们可以在axes相关设置里找到如下设置:
#axes.unicode_minus : True 可见默认情况下采用的是unicode的minus,看来我们选择的字体对这点支持不够,所以只要把它设置为False就可以了。
因此,最终需要在程序中加入如下代码,就可以正常显示汉字,并且不出现问题了。
[code]from pylab import * mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False
注意:每个要显示的汉字串前要加u,即u"汉字串"。
enumerate函数
enumerate英文翻译为枚举的意思。 可以将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标
枚举过程:
[code] >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter'] >>> list(enumerate(seasons)) # 默认start为0 [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')] >>> list(enumerate(seasons, start=1)) # start为1 [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')] >>> s = "ABCD" >>> list(enumerate(s)) # 字符串类型 [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D')] >>> l = ["A", "B", "C", "D"] >>> list(enumerate(l)) # 列表类型 [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D')] >>> t = ("A", "B", "C", "D") >>> list(enumerate(t)) # 元祖类型 [(0, 'A'), (1, 'B'), (2, 'C'), (3, 'D')] >>> d = {"A": 1, "B": 2} >>> list(enumerate(d)) # 字典类型,枚举其key [(0, 'A'), (1, 'B')]
python中的map函数
map函数的原型是map(function, iterable, …),它的返回结果是一个列表。
参数function传的是一个函数名,可以是python内置的,也可以是自定义的。 参数iterable传的是一个可以迭代的对象,例如列表,元组,字符串这样的。
str()是python的内置函数,这个例子是把列表/元组/字符串的每个元素变成了str类型,然后以列表的形式返回
[code]a=list(map(str,'python')) print(a)
输出:
['p', 'y', 't', 'h', 'o', 'n']
python中filter函数
filter(function, iterable)
参数
- function -- 判断函数。
- iterable -- 可迭代对象。
[code]def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(newlist)
输出结果 :
[code][1, 3, 5, 7, 9]
难点 x, y = np.split(data, (13,), axis=1)
-
1
(
13
,)相当于[:
13
]和[
13
:]这样就等于拆成了两部分,第一部分是x,第二部分是y
1
如果是(
13
,
14
)就相当于三部分了[:
13
],[
13
:
14
],[
14
:],这种情况就需要x,y,z了
1
另外这个参数还可以是单个数,指的是直接把np分成若干份。
1
2
data = np.arange(
20
)
x, y = np.split(data, (
13
,), axis=
0
)
1
x = [
0
1
2
3
4
5
6
7
8
9
10
11
12
]
1
y= [
13
14
15
16
17
18
19
]
-
#axis=1,代表列,是要把data数据集中的所有数据按第四、五列之间分割为X集和Y集。
x, y = np.split(data, (4,), axis=1)
1
2
纵向分割, 分成两部分, 按列分割print np.split(A, 2, axis = 1)
1
横向分割, 分成三部分, 按行分割print np.split(A, 3, axis = 0)
-
-
分割函数
-
from sklearn.model_selection import train_test_split #train_test_split函数
x = np.arange(15).reshape(-1, 3) #生成5行3列的一个矩阵
-
此处reshape中的-1就是自动化行数,总计15个数三列那就自动是5列了
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=1)
参数含义:
x,y是原始的数据集。x_train,y_train 是原始数据集划分出来作为训练模型的,fit模型的时候用。 x_test,y_test 这部分的数据不参与模型的训练,而是用于评价训练出来的模型好坏,score评分的时候用。 test_size=0.2 测试集的划分比例 random_state=1 随机种子,如果随机种子一样,则随机生成的数据集是相同的 random_state就是为了保证程序每次运行都分割一样的训练集合测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。
MinMaxScaler:归一到 [ 0,1 ]
原理
从原理中我们注意到有一个axis=0,这表示MinMaxScaler方法默认是对每一列做这样的归一化操作,这也比较符合实际应用。
[code]from sklearn import preprocessing import numpy as np x = np.array([[3., -1., 2., 613.], [2., 0., 0., 232], [0., 1., -1., 113], [1., 2., -3., 489]]) min_max_scaler = preprocessing.MinMaxScaler() x_minmax = min_max_scaler.fit_transform(x) print(x_minmax) [[1. 0. 1. 1. ] [0.66666667 0.33333333 0.6 0.238 ] [0. 0.66666667 0.4 0. ] [0.33333333 1. 0. 0.752 ]]
fit,transform,fit_transform常用情况分为两大类
fit_transform(): joins the fit() and transform() method for transformation of dataset.
解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。
transform()和fit_transform()二者的功能都是对数据进行某种统一处理(比如标准化~N(0,1),将数据缩放(映射)到某个固定区间,归一化,正则化等)
fit_transform(trainData)对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等。
根据对之前部分trainData进行fit的整体指标,对剩余的数据(testData)使用同样的均值、方差、最大最小值等指标进行转换transform(testData),从而保证train、test处理方式相同。所以,一般都是这么用:
[code]from sklearn.preprocessing import StandardScaler sc = StandardScaler() sc.fit_tranform(X_train) sc.tranform(X_test)
- 回归问题实例:波士顿房价预测-基于keras的python学习笔记(六)
- 使用sklearn预测波士顿房价
- Tensorflow之多元线性回归问题(以波士顿房价预测为例)
- 【Kaggle笔记】预测泰坦尼克号乘客生还情况(决策树)
- 科学经得起实践检验-python3.6通过决策树实战精准准确预测今日大盘走势(含代码)
- python数据分析-波士顿房价预测
- python机器学习——数据的分类(knn,决策树,贝叶斯)代码笔记
- 使用线性回归模型LinearRegression和SGDRegressor分别对美国波士顿地区房价进行预测
- 科学经得起实践检验-python3.6通过决策树实战精准准确预测今日大盘走势(含代码)
- 最易懂深度学习3:波士顿房价预测(1)
- 基于MATLAB的遗传算法优化的神经网络房价预测实战(附完整代码)
- 机器学习(2)-项目 1: 预测波士顿房价
- 泰坦尼克号决策树预测(附:代码,常用参数,数据集)
- 基于keras的波士顿房价预测
- 线性回归——波士顿房价预测
- 机器学习入门笔记(1):墨尔本房价预测-决策树模型使用
- 使用两种不同配置的K近邻回归模型对美国波士顿房价数据进行回归预测
- keras探索:regression-波士顿房价预测实例(小样本K折验证)
- 梯度下降法实现线性回归, 实例---预测波士顿房价
- 使用逻辑回归预测波士顿房价