很多業(yè)務場景中,我們希望通過一個特定的函數(shù)來擬合業(yè)務數(shù)據(jù),以此來預測未來數(shù)據(jù)的變化趨勢。(比如用戶的留存變化、付費變化等)
目前創(chuàng)新互聯(lián)建站已為近千家的企業(yè)提供了網(wǎng)站建設、域名、虛擬空間、綿陽服務器托管、企業(yè)網(wǎng)站設計、萬榮網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
本文主要介紹在 Python 中常用的兩種曲線擬合方法:多項式擬合 和 自定義函數(shù)擬合。
通過多項式擬合,我們只需要指定想要擬合的多項式的最高項次是多少即可。
運行結(jié)果:
對于自定義函數(shù)擬合,不僅可以用于直線、二次曲線、三次曲線的擬合,它可以適用于任意形式的曲線的擬合,只要定義好合適的曲線方程即可。
運行結(jié)果:
輸入以下代碼導入我們用到的函數(shù)庫。
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(0,5,0.1);
y=np.sin(x);
plt.plot(x,y)
采用剛才代碼后有可能無法顯示下圖,然后在輸入以下代碼就可以了:
plt.show()
# 自定義繪制ks曲線的函數(shù)
def plot_ks(y_test, y_score, positive_flag):
# 對y_test,y_score重新設置索引
y_test.index = np.arange(len(y_test))
#y_score.index = np.arange(len(y_score))
# 構(gòu)建目標數(shù)據(jù)集
target_data = pd.DataFrame({'y_test':y_test, 'y_score':y_score})
# 按y_score降序排列
target_data.sort_values(by = 'y_score', ascending = False, inplace = True)
# 自定義分位點
cuts = np.arange(0.1,1,0.1)
# 計算各分位點對應的Score值
index = len(target_data.y_score)*cuts
scores = target_data.y_score.iloc[index.astype('int')]
# 根據(jù)不同的Score值,計算Sensitivity和Specificity
Sensitivity = []
Specificity = []
for score in scores:
? ? # 正例覆蓋樣本數(shù)量與實際正例樣本量
? ? positive_recall = target_data.loc[(target_data.y_test == positive_flag) (target_data.y_scorescore),:].shape[0]
? ? positive = sum(target_data.y_test == positive_flag)
? ? # 負例覆蓋樣本數(shù)量與實際負例樣本量
? ? negative_recall = target_data.loc[(target_data.y_test != positive_flag) (target_data.y_score=score),:].shape[0]
? ? negative = sum(target_data.y_test != positive_flag)
? ? Sensitivity.append(positive_recall/positive)
? ? Specificity.append(negative_recall/negative)
# 構(gòu)建繪圖數(shù)據(jù)
plot_data = pd.DataFrame({'cuts':cuts,'y1':1-np.array(Specificity),'y2':np.array(Sensitivity),
? ? ? ? ? ? ? ? ? ? ? ? ? 'ks':np.array(Sensitivity)-(1-np.array(Specificity))})
# 尋找Sensitivity和1-Specificity之差的最大值索引
max_ks_index = np.argmax(plot_data.ks)
plt.plot([0]+cuts.tolist()+[1], [0]+plot_data.y1.tolist()+[1], label = '1-Specificity')
plt.plot([0]+cuts.tolist()+[1], [0]+plot_data.y2.tolist()+[1], label = 'Sensitivity')
# 添加參考線
plt.vlines(plot_data.cuts[max_ks_index], ymin = plot_data.y1[max_ks_index],
? ? ? ? ? ymax = plot_data.y2[max_ks_index], linestyles = '--')
# 添加文本信息
plt.text(x = plot_data.cuts[max_ks_index]+0.01,
? ? ? ? y = plot_data.y1[max_ks_index]+plot_data.ks[max_ks_index]/2,
? ? ? ? s = 'KS= %.2f' %plot_data.ks[max_ks_index])
# 顯示圖例
plt.legend()
# 顯示圖形
plt.show()
# 調(diào)用自定義函數(shù),繪制K-S曲線
plot_ks(y_test = y_test, y_score = y_score, positive_flag = 1)
作用就是把合理的數(shù)據(jù)轉(zhuǎn)換為需要的類型。int()整數(shù),float()浮點數(shù),str()字符串,list()列表,tuple()元組,set()集合……
比如a='12'這個是字符串類型,用int函數(shù)a=int(a)這時變量a就是整型,字符串'12'變?yōu)榱苏麛?shù)12。Python沒有變量聲明的要求,變量的屬性在賦值時確定,這樣變量的類型就很靈活。
有一種題目判斷一個整數(shù)是否回文數(shù),用字符串來處理就很簡單
a=1234321#整數(shù)
if str(a)==str(a)[::-1]:#借助字符串反轉(zhuǎn)比較就可以確定是否回文數(shù)。
還比如元組b=(1,3,2,4),元組是不可以更新刪除排序成員的,但是列表是可以的,通過列表函數(shù)進行轉(zhuǎn)換來實現(xiàn)元組的更新刪除和排序。
b=(1,3,2,4)
b=list(b)
b.sort()
b=tuple(b)
這時得到的元組b就是一個升序的元組(1,2,3,4)
再比如你要輸入創(chuàng)建整數(shù)列表或者整數(shù)元組基本上寫法相同,就是用對應的函數(shù)來最后處理。
ls=list(map(int,input().split()))#這個就是列表
tup=tuple(map(int,input().split()))#這個就是元組
再比如有個叫集合的,集合有唯一性,可以方便用來去重。
ls=[1,2,3,1,2,3,1,2,3]
ls=list(set(ls))#通過set()去重后,現(xiàn)在的ls里就是[1,2,3]去重后的列表。
有
當然有,這就是Python函數(shù)圖像工具(EXE)。 本程序運用Python中最令人喜愛的數(shù)據(jù)處理工具numpy和超強的圖像庫matplotlib,實現(xiàn)13種不同類別函數(shù)的分類圖像整理,展示圖像均可以保存為圖片的形式,具備拖動、放大等功能