python教程(僅用于自己學(xué)習(xí)) 來源:w3school
python 語法
-縮進(jìn)
用于切分不同的代碼塊
if 1+1:
print("2")
if 3>1:
print("3比1大")
-變量
存放數(shù)據(jù)值的容器
字符串變量可以用單引號(hào)或雙引號(hào)聲明
-變量名稱
必須以字母或者下劃線開頭,不能以數(shù)字開頭
只能包含字母數(shù)字下劃線
區(qū)分大小寫
-多個(gè)變量賦值
x,y,z="lisa","rose","jennie"
print(x)
print(y)
print(z)
-輸出變量
print(數(shù)值)
print("text"+字符串)
x=1
y=2
z=x+y
print(z)
x="wyb"
print("The beauty is " + x)
-全局變量
在函數(shù)外部創(chuàng)建的變量,可以供函數(shù)外部和內(nèi)部的使用
x = "awesome"
def myfunc():
print("Python is " + x)
myfunc()
在函數(shù)內(nèi)部創(chuàng)建全局變量使用global
def myfunc():
global x
x = "awesome"
myfunc()
print("Python is " + x)
-數(shù)據(jù)類型
type()獲取數(shù)據(jù)類型
--數(shù)字類型
int,float,complex
int()呕缭、float() 和 complex() 可以轉(zhuǎn)換數(shù)據(jù)類型
random()表示隨機(jī)數(shù)
format()可以組合數(shù)字與字符,將他們放在占位符{}里,自動(dòng)郵件中使用到
x=1005
txt="My birthday is {}"
print(txt.format(x))
--布爾類型
True,False
--數(shù)組類型
列表(List)乌助,有序可更改的集合拓轻,允許重復(fù);列表用方括號(hào)[ ]編寫
元組(Tuple),有序不可更改的集合,允許重復(fù);元組用括號(hào)()編寫
集合(Set)裕膀,無序無索引的集合,無重復(fù);集合用花括號(hào){}編寫
詞典(Dictionary)勇哗,無序可變有索引的集合昼扛,無重復(fù);字典用花括號(hào){}編寫欲诺,擁有鍵和值
列表(List)與numpy 中數(shù)組(Array)的區(qū)別:
list中的元素的數(shù)據(jù)類型可不一樣抄谐;array中的元素的數(shù)據(jù)類型必須一樣;
list中的元素不可進(jìn)行四則運(yùn)算扰法;array可以斯稳;
lsit 比array具有更多的存儲(chǔ)空間;
兩者均可通過索引查找元素
- List
x=["xz","wyb","bxg","zz","bb"]
print(x)
#len()查看列表的長度
print(len(x))
#負(fù)索引從最后一個(gè)開始
print(x[-1])
#通過起始點(diǎn)(包含)到終點(diǎn)(不包含)來指定索引范圍
print(x[0:3])
#替換值
x[0]="zz"
print(x)
#append() 將項(xiàng)目添加至列表的末尾
x.append("yb")
print(x)
#insert(指定索引處迹恐,"項(xiàng)目")
x.insert(3,"szd")
print(x)
#remove(指定項(xiàng)目)挣惰,pop(指定索引),del 刪除指定的項(xiàng)目
x.remove("zz")
print(x)
x.pop(0)
print(x)
del x[-1]
print(x)
#clear()清空列表
x.clear()
print(x)
#copy()復(fù)制列表
x=["bjyx","xz","wyb","szd"]
y=x.copy()
print(y)
#list()復(fù)制列表
z=list(x)
print(z)
#合并列表殴边,直接+ 或者將其中一個(gè)列表的項(xiàng)目追加到另一個(gè)項(xiàng)目中或者extend()將列表元素添加至末尾
a=x+y
print(a)
x=["xz","wyb","zz","bb"]
y=["bjyx","zsww","lsfy","szd"]
for a in y:
x.append(a)
print(x)
x.extend(y)
print(x)
#list()構(gòu)造新列表憎茂,雙括號(hào)
bjyx=list(("xz","wyb","zz","bb"))
print(bjyx)
#sort()排序
x=list(("5","1","8","3","3"))
x.sort()
print(x)
- 元組(tuple)
a=("wyb","xz","zz","bb","szd")
print(a)
#返回元組第1個(gè)項(xiàng)目
print(a[0])
#更改元組,將元組轉(zhuǎn)換成列表再進(jìn)行更改
b=list(a)
b[0]="yb"
a=tuple(b)
print(a)
#遍歷元組a的項(xiàng)目
for x in a:
print(x)
#創(chuàng)建一個(gè)有項(xiàng)目的元組,如果只有一個(gè)項(xiàng)目锤岸,需要加逗號(hào),
b=("b","j","y","x","s","z","d")
c=("bjyxszd",)
#元組無法更改竖幔,只能完全刪除元組用 del
del c
#合并元組用+
c=a+b
print(c)
#構(gòu)建新的元組,tuple(()) 兩個(gè)括號(hào)
d=tuple(("b","j","y","x"))
print(d)
- 集合(set)
a={"s","z","d"}
print(a)
#add()添加項(xiàng)目
a.add("bjyx")
print(a)
#update添加多項(xiàng)
a.update(["wyb","xz","zz"])
print(a)
#remove()刪除項(xiàng)目
a.remove("zz")
print(a)
a.clear()
del a
#union()合并兩個(gè)集合
#set(())創(chuàng)建新的集合是偷,雙括號(hào)
a=set(("xz","wyb","zz","bb"))
c=a.union(b)
print(c)
- 字典(dictionary)
a={"name":"wyb"
,"gender":"male"
,"age":24
,"job":"actor"
}
#通過引用鍵名來查找項(xiàng)目或者使用get()方法
x=a["name"]
print(x)
y=a.get("job")
print(y)
#通過鍵名來更改值
a["job"]="singer"
print(a)
#使用values()返回字典里的值
for x in a.values():
print(x)
#使用items()返回字典里的鍵和值
for y in a.items():
print(y)
#通過增加新的索引鍵來添加新項(xiàng)目
a["works"]="EOEO"
print(a)
#pop(),del刪除指定鍵名的項(xiàng)
a.pop("works")
print(a)
del a["age"]
print(a)
#popitem()刪除最后插入的項(xiàng)目
a.popitem()
print(a)
#clear()清空字典里的項(xiàng)目
a.clear()
print(a)
#copy()復(fù)制字典
a=dict(name="xz",gender="male",age=29)
print(a)
-循環(huán)
- if
a=1
b=3
if a > b:
print("a>b")
elif a<b:
print("a<b")
else:
print("a=b")
- while
#預(yù)先設(shè)置索引變量i=1,遞增i,當(dāng)i=3時(shí)拳氢,循環(huán)停止
i=1
while i<7:
print(i)
if i==3:
break
i += 1
#遞增i,當(dāng)i=3時(shí),停止當(dāng)前迭代蛋铆,繼續(xù)下一個(gè)
i = 1
while i < 7:
i += 1
if i == 3:
continue
print(i)
- for
用于迭代序列(元組馋评,列表,字典刺啦,集合等)留特,不需要預(yù)先設(shè)置索引變量
x=["b","j","y","x","s","z","d"]
for y in x:
print(y)
#當(dāng)遇到j(luò)時(shí),停止迭代玛瘸,返回b j
for y in x:
print(y)
if y=="j":
break
#與上不同的是先停止迭代再打印蜕青,此時(shí)只返回j
for y in x:
if y=="j":
break
print(y)
#continue,遇到j(luò)時(shí),停止當(dāng)前迭代繼續(xù)下一個(gè)迭代
for y in x:
if y=="j":
continue
print(y)
#range()函數(shù)糊渊,默認(rèn)從0開始右核,遞增1,并以指定的數(shù)字結(jié)束
#返回0-9的值
for x in range(10):
print(x)
#range(起始值渺绒,結(jié)束值贺喝,增量)
for x in range(3,15,3):
print(x)
#嵌套循環(huán)磷瘤,外循環(huán)沒迭代一次,內(nèi)循環(huán)將執(zhí)行一次
x=["b","j","y","x"]
y=["x","z","d"]
for a in x:
for b in y:
print(a,b)
-函數(shù)
將參數(shù)傳遞到函數(shù)中搜变,函數(shù)將參數(shù)作為結(jié)果返回
用def來定義函數(shù)
參數(shù)在函數(shù)括號(hào)里指定,可以添加任何參數(shù)针炉,用逗號(hào)隔開
函數(shù)與方法的區(qū)別:
- 函數(shù)分類:
內(nèi)置函數(shù)
自定義函數(shù)
匿名函數(shù)
遞歸函數(shù)- 方法分類:
普通方法
私有方法
屬性方法
特殊方法
類方法
靜態(tài)方法- 作用域
函數(shù):函數(shù)作用后挠他,通過賦值等方法修改變量的值不會(huì)被保留
方法:用方法對(duì)變量的修改的值會(huì)保留- 調(diào)用方式
函數(shù):函數(shù)名()
方法:對(duì)象.方法名()
def my_func(a,b,c):
print(a+b*c)
my_func(1,2,3)
#以什么類型發(fā)送到函數(shù),到達(dá)函數(shù)內(nèi)仍是該類型
def my_func(wyb):
for x in wyb:
print(x)
wyb=["male","24","actor"]
my_func(wyb)
#return返回函數(shù)值
def my_func(a,b,c):
return a+b*c
my_func(1,2,3)
#函數(shù)遞歸
#求一元二次方程的解
def my_func(a,b,c):
if a==0:
if b==0:
if c==0:
return("任意解")
else:
return("無解")
else:
result=-c/b
return result
elif a!=0:
if b**2-4*a*c>=0:
result1=(-b+(b**2-4*a*c)**0.5)/(2*a)
result2=(-b-(b**2-4*a*c)**0.5)/(2*a)
return(result1,result2)
else:
return("無解")
print(result)
my_func(1,3,1)
-類與對(duì)象
類(Class):一個(gè)模板篡帕,通過類可以創(chuàng)建無數(shù)個(gè)具體實(shí)例
對(duì)象(object):類不能直接使用殖侵,通過類創(chuàng)建出的實(shí)例(又稱對(duì)象)才能使用
屬性:類中的所有變量為屬性
方法:類中的所有函數(shù);包括實(shí)例方法(該類的每個(gè)實(shí)例都可以調(diào)用的方法镰烧,只有實(shí)例才能調(diào)用對(duì)象方法拢军,有一個(gè)額外的參數(shù)self),類方法(將類本身作為對(duì)象進(jìn)行操作的方法怔鳖,類和實(shí)例都可以調(diào)用)茉唉,靜態(tài)方法(存在與類中的普通函數(shù),不會(huì)對(duì)實(shí)例進(jìn)行任何操作)
#內(nèi)置的 __init__() 函數(shù)结执,使用該函數(shù)將值賦值給對(duì)象屬性度陆,每次使用類創(chuàng)建新對(duì)象時(shí),都會(huì)自動(dòng)調(diào)用 __init__() 函數(shù)
#self參數(shù)献幔,是對(duì)類的當(dāng)前實(shí)例的引用懂傀,用于訪問該類的變量,必須是任意函數(shù)的首個(gè)參數(shù)蜡感,可任意命名
class bjyx:
def __init__(self,name,age):
self.name=name
self.age=age
b1=bjyx("wyb",24)
b2=bjyx("xz",30)
print(b1.name,b2.name)
#對(duì)象方法蹬蚁,在類bjyx中創(chuàng)建方法,在b1對(duì)象中執(zhí)行它
class bjyx:
def __init__(self,name,age):
self.name=name
self.age=age
def myfunc(self):
print("bjyx is "+ self.name)
b1=bjyx("wyb",24)
b2=bjyx("xz",30)
b1.myfunc()+b2.myfunc()
-繼承
允許繼承另一個(gè)類的所有屬性和方法
class bjyx:
def __init__(self,name,age):
self.name=name
self.age=age
def myfunc(self):
print("bjyx is "+ self.name)
class bx(bjyx):
pass #不向該類中添加任何其他屬性與方法
x1=bx("bb",24)
x2=bx("zz",30)
x1.myfunc()+x2.myfunc()
#如果在子類中添加一個(gè)與父類中的函數(shù)同名的方法郑兴,則將覆蓋父方法的繼承
class bjyx:
def __init__(self,name,age):
self.name=name
self.age=age
def myfunc(self):
print("bjyx is "+ self.name)
class bx(bjyx):
def __init__(self,name,age,job):
super().__init__(name, age) #super函數(shù)自動(dòng)繼承父類的方法和屬性
self.job=job
def welcome(self):
print("welcome",self.name,self.job,"to weibozhiye")
x1=bx("bb",24,"actor")
x2=bx("zz",30,"actor")
x1.myfunc()+x2.myfunc()
-模塊
#創(chuàng)建模塊犀斋,將所需代碼保存在calculation.py文件
def cal_func(a,b,c):
if a==0:
if b==0:
if c==0:
return("任意解")
else:
return("無解")
else:
result=-c/b
return result
elif a!=0:
if b**2-4*a*c>=0:
result1=(-b+(b**2-4*a*c)**0.5)/(2*a)
result2=(-b-(b**2-4*a*c)**0.5)/(2*a)
return(result1,result2)
else:
return("無解")
print(result)
#通過import來使用模塊module_name.function_name
import calculation as cal
cal.cal_func(1,2,1)
-日期
#使用datetime模塊的datetime()類創(chuàng)建日期
#datetime()類需要三個(gè)參數(shù)來創(chuàng)建日期:年、月情连、日
import datetime as dt
x=dt.datetime(2021,1,1)
print(x)
#[strftime()方法](https://www.runoob.com/python/att-time-strftime.html)闪水,將日期對(duì)象格式化為可讀字符串的方法
import datetime as dt
x=dt.datetime(2021,2,5)
print(x.strftime("%Y-%m"))
-json
用于存儲(chǔ)和交換數(shù)據(jù)的語法,在數(shù)據(jù)庫存儲(chǔ)字段信息時(shí)使用蒙具,需要解析
#json.loads()方法球榆,解析json字符串,結(jié)果是Python字典dictionary
import json
x='{"name":"wyb","age":24,"job":"dancer"}'
y=json.loads(x)
print(y["name"])
#json.dumps()方法禁筏,將Python對(duì)象轉(zhuǎn)換為json字符串
import json
x={"name":"wyb","age":24,"job":"dancer"}
y=json.dumps(x)
print(y)
-RegEx
正則表達(dá)式是形成搜索模式的字符序列持钉,可用于檢查字符串是否包含指定的搜索模式
re模塊中的函數(shù):
findall:返回包含所有匹配項(xiàng)的列表
search:如果字符串中的任意位置存在匹配,則返回Match對(duì)象
split:返回在每次匹配時(shí) 拆分字符串的列表
sub:用字符串替換一個(gè)或多個(gè)匹配項(xiàng)
#findall()函數(shù)
#查找所有"a"
import re
txt="China is a great country"
x=re.findall("a",txt)
print(x)
#search()函數(shù)
#檢索字符串以查看它是否以"china"開頭并以"country"結(jié)尾
import re
txt="China is a great country"
x=re.search("^China.*country$",txt)
if (x):
print("match")
else:
print("no match")
#split()函數(shù)
#在每個(gè)字符處進(jìn)行拆分
import re
txt="wyb and xz are great actors"
x=re.split("\s",txt)
print(x)
#指定maxsplit參數(shù)來控制出現(xiàn)次數(shù)
import re
txt="wyb and xz are great actors"
x=re.split("\s",txt,3)
print(x)
#sub函數(shù)
#用數(shù)字10050805替換每個(gè)空白字符
import re
txt="wyb and xz are great actors"
x=re.sub("\s","10050805",txt)
print(x)
#通過指定count參數(shù)來控制替換次數(shù)
import re
txt="wyb and xz are great actors"
x=re.sub("\s","10050805",txt,2)
print(x)
python文件處理
open()函數(shù)有兩個(gè)參數(shù):文件名和模式
- 四種打開文件的不同方法:
"r":讀取-默認(rèn)值
"a":追加篱昔,在原文件末尾追加
"w":寫入每强,會(huì)覆蓋原文件
"x":創(chuàng)建
#open()函數(shù)返回文件對(duì)象始腾,此對(duì)象有一個(gè)read()方法用于讀取文件的內(nèi)容,close()關(guān)閉文件
f = open("demofile.txt")
print(f.read())
f.close()
#在文件中追加內(nèi)容
x=open("E:/miki/coupang/bjyx.txt","a")
x.write("bjyx")
x=open("E:/miki/coupang/bjyx.txt","r")
print(x.read())
#創(chuàng)建新文件
y=open("D:/miki/coupang/wyb.txt","x")
#remove()刪除文件
#rmdir()刪除文件夾
import os
os.remove("E:/miki/coupang/wyb.txt")
Python NumPy
NumPy是用于處理數(shù)組的Python庫
NumPy旨在提供一個(gè)比傳統(tǒng)Python列表快50倍的數(shù)組對(duì)象,NumPy數(shù)組存儲(chǔ)在內(nèi)存中的一個(gè)連續(xù)位置空执,因此進(jìn)程可以非常有效地訪問和操縱他們
import numpy as np
arr=np.array([1,2,3,4,5])
print(arr)
print(type(arr))
-數(shù)組中的維
數(shù)組深度(嵌套數(shù)組(將數(shù)組作為元素的數(shù)組))的一個(gè)級(jí)別
#ndim屬性,返回一個(gè)整數(shù)辨绊,表示數(shù)組的維數(shù)
import numpy as np
a=np.array(1)
b=np.array([1,2,3,4,5])
c=np.array([[1,2,3],[4,5,6]])
d=np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
print(a.ndim)
print(b.ndim)
print(c.ndim)
print(d.ndim)
#創(chuàng)建數(shù)組奶栖,用ndmin參數(shù)定義維數(shù)
import numpy as np
arr=np.array([1,2,3,4],ndmin=5)
print(arr)
print('number of dimensions:',arr.ndim)
-NumPy數(shù)組索引
數(shù)組索引等同于訪問數(shù)組元素
索引號(hào)從0開始,第一個(gè)元素的索引為0门坷,第二個(gè)為1
import numpy as np
arr=np.array([1,2,3,4])
print(arr[0])
#訪問二維數(shù)組中的元素宣鄙,可以使用逗號(hào)分隔的整數(shù)表示元素的維數(shù)和索引
#訪問第一維中的第二個(gè)元素
import numpy as np
arr=np.array([[1,2,3,4,5],[6,7,8,9,10]])
print('2nd element on 1st dim:',arr[0,1])
-裁切數(shù)組
#[start:end:step]
import numpy as np
arr=np.array([1,2,3,4,5])
print(arr[0:3:2])
-NumPy數(shù)組數(shù)據(jù)類型
#dtype屬性返回?cái)?shù)組的數(shù)據(jù)類型
import numpy as np
arr=np.array([1,2,3,4,5,6])
print(arr.dtype)
#用數(shù)據(jù)類型“字符串”創(chuàng)建數(shù)組
import numpy as np
arr=np.array([1,2,3,4,5,6],dtype='S')
print(arr.dtype)
-NumPy數(shù)組形狀
#shape屬性返回一個(gè)元組,每個(gè)索引具有相應(yīng)元素的數(shù)量
#(2,4)表示該數(shù)組為二維默蚌,每維有4個(gè)元素
import numpy as np
arr=np.array([[1,2,3,4,5,6],[2,4,3,4,5,6]])
print(arr.shape)
-NumPy數(shù)組排序
#sort() 函數(shù)排序
import numpy as np
arr=np.array([[1,2,3,4,5,6],[2,4,3,4,5,6]])
print(np.sort(arr))
-NumPy數(shù)組過濾
#使用布爾索引列表來進(jìn)行過濾冻晤,索引處的值為True則過濾到數(shù)組中,F(xiàn)alse則排除
import numpy as np
arr=np.array([1,2,3,4,56,25,61,23])
#新建一個(gè)空列表
filter_arr=[]
#遍歷arr中的每個(gè)元素
for element in arr:
#如果元素可以被2整除绸吸,則將值設(shè)置為True,否則設(shè)置為False
if element%2==0:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr=arr[filter_arr]
print(newarr)
print(filter_arr)
-NumPy隨機(jī)數(shù)
NumPy中提供了random模塊來處理隨機(jī)數(shù)
#randint()隨機(jī)整數(shù)鼻弧,rand()隨機(jī)浮點(diǎn)數(shù)
from numpy import random
x=random.rand(3,5)
print(x)
-機(jī)器學(xué)習(xí)
數(shù)據(jù)的分布
#從均勻分布中隨機(jī)采樣numpy.random.uniform(low,high,size)
import numpy as np
import matplotlib.pyplot as plt
x=np.random.uniform(0.0,1.0,500)
plt.hist(x,5)
plt.show()
#從正態(tài)分布中隨機(jī)采樣numpy.random.normal(mean,std,size)
import numpy as np
import matplotlib.pyplot as plt
x=np.random.normal(0.0,1.0,500000)
plt.hist(x,100)
plt.show()
#散點(diǎn)圖pyplot.scatter(x,y),需要兩個(gè)長度相同的數(shù)組,一個(gè)數(shù)組用于 x 軸的值锦茁,另一個(gè)數(shù)組用于 y 軸的值
import matplotlib.pyplot as plt
x=np.random.normal(1,0.5,10000)
y=np.random.normal(2,0.5,10000)
plt.scatter(x,y)
plt.show()
-機(jī)器學(xué)習(xí)-線性回歸
線性回歸用于找變量與變量之間的關(guān)系温数,預(yù)測未來的趨勢
import matplotlib.pyplot as plt
from scipy import stats
x=[4,5,12,4,5,8,9,15,18,48,52,90]
y=[45,40,45,67,81,49,63,33,56,40,89,101]
#slope斜率,intercept截距,r相關(guān)性蜻势,p是否顯著,std_err標(biāo)準(zhǔn)差
#r-square在0-1之間撑刺,0表示不相關(guān),1表示完全相關(guān)握玛;p值看x與y的線性關(guān)系是否顯著够傍,<0.05則顯著相關(guān)
slope,intercept,r,p,std_err=stats.linregress(x,y)
def myfunc(x):
return slope*x+intercept
#map(function,iterable,...)函數(shù),對(duì)函數(shù)function對(duì)給定的序列做映射;第一個(gè)參數(shù)function被每個(gè)元素調(diào)用挠铲,并返回每次function返回值的列表
mymodel=list(map(myfunc,x))
plt.scatter(x,y)
plt.plot(x,mymodel)
plt.show()
slope,intercept,r,p,std_err
-機(jī)器學(xué)習(xí)-多元回歸
y與x1,x2,x3,……多個(gè)變量之間的關(guān)系
#導(dǎo)入pandas模塊讀取csv文件,并返回一個(gè)DataFrame對(duì)象
import pandas as pd
#導(dǎo)入sklearn模塊使用 LinearRegression() 方法創(chuàng)建一個(gè)線性回歸對(duì)象
from sklearn import linear_model
df=pd.read_csv('E:/miki/cars.csv')
#將獨(dú)立值列表命名為大寫X,將相關(guān)值列表命名為小寫y
X=df[['Weight','Volume']]
y=df['CO2']
regr=linear_model.LinearRegression()
#fit()方法冕屯,將獨(dú)立值和從屬值作為參數(shù),并用描述這種關(guān)系的數(shù)據(jù)填充回歸對(duì)象
regr.fit(x,y)
predictedCO2=regr.predict([[2300,1300]])
print(predictedCO2)
-縮放
特征縮放:數(shù)據(jù)擁有不同的值拂苹,不同的度量安聘,需要將數(shù)據(jù)縮放成可以進(jìn)行比較的值
標(biāo)準(zhǔn)化:z = (x - u) / s 其中 z 是新值,x 是原始值瓢棒,u 是平均值浴韭,s 是標(biāo)準(zhǔn)差。
#StandardScaler()方法脯宿,返回帶有轉(zhuǎn)換數(shù)據(jù)集方法的scaler對(duì)象
import pandas as pd
from sklearn import linear_model
from sklearn.preprocessing import StandardScaler
scale=StandardScaler()
df=pd.read_csv('E:/miki/cars.csv')
x=df[['Weight','Volume']]
scaledX=scale.fit_transform(x)
print(scaledX)
fit(),transform(),fit_transform()
fit(x,y) 訓(xùn)練集的固有屬性
transform(x) 標(biāo)準(zhǔn)化
fit_transform()是兩者的結(jié)合
-評(píng)估模型
訓(xùn)練/測試:衡量一個(gè)模型準(zhǔn)確度念颈,將數(shù)據(jù)分為兩組,80%作為訓(xùn)練集连霉,20%作為測試集
#查看數(shù)據(jù)集
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(2)
x=np.random.normal(3,1,100)
y=np.random.normal(150,40,100)/x
plt.scatter(x,y)
plt.scatter(x,y)
plt.show()
#拆分訓(xùn)練/測試集
#數(shù)組裁切 [start:end:step]
train_x=x[:80]
train_y=y[:80]
test_x=x[80:]
test_y=y[80:]
#顯示測試集/訓(xùn)練集
plt.scatter(train_x,train_y)
plt.show()
plt.scatter(test_x,test_y)
#擬合數(shù)據(jù)集
#繪制多項(xiàng)式回歸線
import numpy
import matplotlib.pyplot as plt
numpy.random.seed(2)
x=numpy.random.normal(3,1,100)
y=numpy.random.normal(150,40,100)/x
train_x=x[:80]
train_y=y[:80]
test_x=x[80:]
test_y=y[80:]
#自由度是4榴芳,生成多項(xiàng)式對(duì)象
#poly1d(系數(shù)向量)
mymodel=numpy.poly1d(numpy.polyfit(train_x,train_y,4))
myline=numpy.linspace(0,6,100)
plt.scatter(train_x,train_y)
plt.plot(myline,mymodel(myline))
plt.show()
#計(jì)算訓(xùn)練集的擬合度R2
import numpy
from sklearn.metrics import r2_score
#seed(2)表示從第二堆種子數(shù)里挑選隨機(jī)數(shù)
numpy.random.seed(2)
x=numpy.random.normal(3,1,100)
y=numpy.random.normal(150,40,100)/x
train_x=x[:80]
train_y=y[:80]
test_x=x[80:]
test_y=y[80:]
#多項(xiàng)式擬合函數(shù)np.polyfit(x,y,num)
mymodel=numpy.poly1d(numpy.polyfit(train_x,train_y,4))
r2=r2_score(train_y,mymodel(train_x))
print(r2)
#計(jì)算測試集的擬合度
import numpy
from sklearn.metrics import r2_score
numpy.random.seed(2)
train_x=x[:80]
train_y=y[:80]
test_x=x[80:]
test_y=y[80:]
mymodel=numpy.poly1d(numpy.polyfit(train_x,train_y,4))
r2=r2_score(test_y,mymodel(test_x))
print(r2)
#預(yù)測值
print(mymodel(5))