turtle: 提供的绘图函数绘制
·turtle.width(2):设置宽度。
·turtle.color("black"):设置画笔颜色。
·turtle.circle(120):画圆。
·turtle.penup():抬笔。
·turtle.goto(-60,130):移动到坐标点。
·turtle.pendown():画笔落下。
·turtle.setheading(90):设置朝向,向北90°。
·turtle.forward(len):前进len指定的距离。
·turtle.left(3):左转3个单位。
·turtle.done():关闭turtle。
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 画圆和圆弧
import turtle
if __name__ == "__main__":
# 画脸
turtle.width(2) # 设置宽度
turtle.color("black") # 设置画笔颜色
turtle.circle(120) # 画圆
# 画眼睛
turtle.penup() # 抬笔
turtle.goto(-60, 130) # 移动到坐标点
turtle.pendown() # 下笔
turtle.color("black")
turtle.circle(20)
turtle.penup() # 抬笔
turtle.goto(60, 130) # 移动到坐标点
turtle.pendown() # 下笔
turtle.color("black")
turtle.circle(20)
# 画鼻子
turtle.penup() # 抬笔
turtle.goto(0, 120) # 移动到坐标点
turtle.pendown() # 下笔
turtle.goto(-50, 70)
turtle.goto(50, 70)
turtle.goto(0, 120)
# 画嘴巴
turtle.penup() # 抬笔
turtle.goto(-60, 45) # 移动到坐标点
turtle.pendown() # 下笔
#turtle.circle(90, extent= 90)
turtle.setheading(90) # 设置朝向
len = 1 # 设置初始走的速度为1
for j in range(60):
if j > 30: # 当j<30,也就是画前一半的弧线
len += 0.2 # 让速度越走越快
else: # 画后一半弧线
len -= 0.2 # 让速度越走越慢
turtle.forward(len) # 前进
turtle.left(3) # 左转
turtle.goto(-60, 45)
turtle.done() # 关闭
Python中的shape和reshape():
shape是查看数据有多少行多少列
reshape()是数组array中的方法,作用是将数据重新组织
- shape
import numpy as np
a = np.array([1,2,3,4,5,6,7,8]) #一维数组
print(a.shape[0]) #值为8,因为有8个数据
print(a.shape[1]) #IndexError: tuple index out of range
a = np.array([[1,2,3,4],[5,6,7,8]]) #二维数组
print(a.shape[0]) #值为2,最外层矩阵有2个元素,2个元素还是矩阵。
print(a.shape[1]) #值为4,内层矩阵有4个元素。
print(a.shape[2]) #IndexError: tuple index out of range
- reshape()
注: arr.reshape(-1,3) #二维 -1代表的意思:不知道分多少行,但必须分成3列
Symbol 函数接收一个字符串作为参数,表示对Symbol的描述,主要是为了在控制台显示,或者转为字符串的时候,比较容易区分,如下
let s3 = Symbol('zhang');
let s4 = Symbol('leo');
console.log(s3, s4); // Symbol(zhang) Symbol(leo)
isdir:os.path.isdir()函数判断某一路径是否为目录, 括号里写的是路径 path
递归函数要有一个约束条件,否则无法结束
ApI: 系统提供给我们的函数
iloc[a:b,c:d]:取行索引从a到b-1,列索引从c到d-1的数据
iloc[a:b,c]:取行索引从a到b-1,列索引为c的数据。注意:在iloc中a:b是左到右不到的,即lioc[1:3,:]是从行索引从1到2,所有列索引的数据。
shape是查看数据有多少行多少列
reshape()是数组array中的方法,作用是将数据重新组织np.arange(16).reshape(2,8) # 生成16个自然数,以2行8列的形式显示
集成学习是使用一系列学习器进行学习,并使用某种规则把各个学习结果进行整合从而获得比单个学习器更好的学习效果的一种机器学习方法。一般情况下,集成学习中的多个学习器都是同质的"弱学习器"。
(随机森林RF)需要调参的参数也包括两部分,第一部分是Bagging框架的参数,第二部分是CART决策树的参数。
再把调参具体说下:
1、首先先调既不会增加模型复杂度,又对模型影响最大的参数n_estimators(学习曲线)
2、找到最佳值后,调max_depth(单个网格搜索,也可以用学习曲线)
一般根据数据的大小来进行一个试探,乳腺癌数据很小,所以可以采用1~10,或者1~20这样的试探但对于像digit recognition那样的大型数据来说,我们应该尝试30~50层深度(或许还不足够)
3、接下来依次对各个参数进行调参。
注:对于大型数据集,max_leaf_nodes可以尝试从1000来构建,先输入1000,每100个叶子一个区间,再逐渐缩小范围
对于min_samples_split和min_samples_leaf,一般是从他们的最小值开始向上增加10或20,面对高维度高样本量数据,如果不放心,也可以直接+50,对于大型数据,可能需要200~300的范围,如果调整的时候发现准确率无论如何都上不来,那可以放心大胆调一个很大的数据,大力限制模型的复杂度
例如:
在整个调参过程之中:
1.学习曲线调整n_estimators,先10个一组,再细分,确定n_estimators=73最优
2.调整max_depth,得分没有变化,我们可以选择不调整此参数
3.调整max_features,得分提高了,max_features取值24
4.调整min_samples_leaf,得分没有变化,我们可以选择不调整此参数
5.调整min_samples_split,得分提高了,min_samples_split取值6
6.最后尝试一下criterion,得分没有变化,我们可以选择不调整此参数
封装:把内容封装到某个地方,以便后面使用(使用初始化构造方法将内容封装到对象中,然后通过对象直接或者self来获取被封装的内容)
__mro__方法来获取这个类的调用顺序
__str__方法用于返回对象的描述信息,如果不使用__str__方法,直接print,或者return,返回的是对象的内存地址。如果在__str__中定义了描述信息,print或者return时,返回的就不是内存地址,显示更友好,实现了类到字符串的转化。
注:重写父类方法后,子类调用父类的方法时将调用的是子类的方法(def)
所谓多态,就是定义时的类型和运行时的类型不同。
print(A.__mro__) # 可以显示类的依次继承关系