主頁 >  其他 > 基于K近鄰的電影推薦與分級預測

基于K近鄰的電影推薦與分級預測

2020-10-10 02:43:30 其他

作者|GUEST
編譯|VK
來源|Analytics Vidhya

介紹

在當今繁忙的世界中,推薦系統變得越來越重要,人們總是在尋找最適合他們的產品/服務,因此,推薦系統非常重要,因為它們可以幫助用戶在不消耗認知資源的情況下做出正確的選擇,

在本博客中,我們將了解推薦系統的基礎知識,并學習如何通過實作K-最近鄰演算法來構建一個使用協同過濾的電影推薦系統,我們還將根據鄰居預測給定電影的評級,并將其與實際評級進行比較,

推薦系統的型別

推薦系統大致可分為三類

  1. 協同過濾

  2. 基于內容的篩選

  3. 混合推薦系統

協同過濾

這種過濾方法通常基于收集和分析用戶的行為、活動或偏好資訊,并根據與其他用戶的相似性來預測他們會喜歡什么,協作過濾方法的一個主要優點是它不依賴于機器可分析的內容,因此它能夠準確地推薦諸如電影之類的復雜專案,而不需要“理解”專案本身,

此外,還有幾種型別的協同過濾演算法

  • 用戶-用戶協同過濾:嘗試搜索相似的客戶,并根據他/她的相似選擇提供產品,
  • 項-項協同過濾:它與前面的演算法非常相似,但是我們沒有找到一個看起來很相似的客戶,而是嘗試查找相似的項,一旦我們有了商品外觀相似矩陣,我們就可以很容易地向從商店購買商品的顧客推薦相似的商品,
  • 其他算法:還有其他方法,如市場籃子分析,它通過尋找交易中經常出現的專案組合來作業,

基于內容的過濾

這些過濾方法基于對專案的描述和用戶的組態檔,在基于內容的推薦系統中,使用關鍵字來描述專案,并建立用戶組態檔來說明用戶喜歡的專案型別,換句話說,這些演算法試圖推薦與用戶過去喜歡的產品相似的產品,

混合推薦系統

最近的研究表明,結合協作過濾和基于內容的過濾的混合方法在某些情況下可能更有效,混合方法可以通過多種方式實作,分別進行基于內容的預測和基于協作的預測,然后將它們組合在一起,將基于內容的特征添加到基于協作的方法中(或者反之亦然),或者將這些方法統一到一個模型中,

Netflix是使用混合推薦系統的一個很好的例子,該網站通過比較相似用戶的觀看和搜索習慣(即協作過濾)以及提供與用戶評價較高的電影具有相同特征的電影(基于內容的過濾)來提出建議,

現在我們已經對推薦系統有了基本的直覺,讓我們從用Python構建一個簡單的電影推薦系統開始,

在這里找到包含完整代碼、資料集和所有插圖的Python Notebook https://www.kaggle.com/heeraldedhia/movie-ratings-and-recommendation-using-knn

TMDb-電影資料庫

電影資料庫(TMDb)是一個社區建立的電影和電視資料庫,它擁有大量關于電影和電視節目的資料,以下是統計資料:https://www.themoviedb.org/

為了簡單和易于計算,我使用了這個巨大資料集的一個子集,即TMDb 5000資料集,它有5000部電影的資訊,分成2個CSV檔案,

  • tmdb_5000_movies.包含分數、標題、發布日期、流派等資訊,
  • tmdb_5000_credits.csv:包含每部電影的演員和劇組資訊,

資料集的鏈接在這里:https://www.kaggle.com/tmdb/tmdb-movie-metadata

Python實作

步驟1-匯入資料集

匯入所需的Python庫,如Pandas、Numpy、Seaborn和Matplotlib,然后使用Pandas中預定義的read_CSV()函式匯入CSV檔案,

movies = pd.read_csv('../input/tmdb-movie-metadata/tmdb_5000_movies.csv')
credits = pd.read_csv('../input/tmdb-movie-metadata/tmdb_5000_credits.csv')

步驟2-資料探索和清理

我們將首先使用head(),descripe()函式來查看資料集的值和結構,然后繼續清理資料,

movies.head()

movies.describe()

類似地,我們可以得到credits資料幀,并得到如下輸出

檢查資料集,我們可以看到genres, keywords、production_companies、production_countries、spoken_languages都是JSON格式,類似地,在其他CSV檔案中,cast和crew都是JSON格式,現在讓我們將這些列轉換為易于閱讀和解釋的格式,我們將把它們轉換成字串,稍后再轉換成串列,以便于解釋,

JSON格式類似于嵌入到字串中的dictionary(key:value)對,一般來說,決議資料在計算上是昂貴和耗時的,幸運的是,這個資料集沒有那么復雜的結構,列之間的一個基本相似之處是它們有一個name鍵,它包含我們需要收集的值,最簡單的方法是決議JSON并檢查每行的name鍵,找到name鍵后,將其值存盤到一個串列中,并用list替換JSON,

但是我們不能直接決議這個JSON,因為它必須首先被解碼,為此,我們使用json.loads把它解碼,然后,我們可以通過這個串列來分析以找到所需的值,讓我們看看下面正確的語法,

# 將genres列從json更改為string
movies['genres'] = movies['genres'].apply(json.loads)
for index,i in zip(movies.index,movies['genres']):
    list1 = []
    for j in range(len(i)):
        list1.append((i[j]['name'])) # “name”包含流派的名稱
    movies.loc[index,'genres'] = str(list1)

以類似的方式,我們將把JSON轉換為列的字串串列:keywords、production_companys、cast和crew,我們將使用movies.iloc[index]

步驟3-合并2個CSV檔案

我們將合并movies和credits資料幀并選擇所需的列,并有一個統一的movies dataframe來處理,

movies = movies.merge(credits, left_on='id', right_on='movie_id', how='left')
movies = movies[['id', 'original_title', 'genres', 'cast', 'vote_average', 'director', 'keywords']]

我們可以檢查像這樣的電影的大小和屬性-

第4步-使用“Genres”列

我們將清除“Genres ”列以找到“genre”串列

movies['genres'] = movies['genres'].str.strip('[]').str.replace(' ','').str.replace("'",'')
movies['genres'] = movies['genres'].str.split(',')

讓我們根據電影型別的發生情況來描繪電影型別,以便從流行程度上深入了解電影型別,

plt.subplots(figsize=(12,10))
list1 = []
for i in movies['genres']:
    list1.extend(i)
ax = pd.Series(list1).value_counts()[:10].sort_values(ascending=True).plot.barh(width=0.9,color=sns.color_palette('hls',10))
for i, v in enumerate(pd.Series(list1).value_counts()[:10].sort_values(ascending=True).values): 
    ax.text(.8, i, v,fontsize=12,color='white',weight='bold')
plt.title('Top Genres')
plt.show()

戲劇似乎是繼喜劇之后最受歡迎的型別

現在讓我們生成一個串列“genreList”,其中包含資料集中提到的所有可能的唯一型別,

genreList = []
for index, row in movies.iterrows():
    genres = row["genres"]
    
    for genre in genres:
        if genre not in genreList:
            genreList.append(genre)
genreList[:10] # 現在我們有了一個流派的串列

one-hot編碼

“genreList”將保存所有流派,但是我們如何才能知道每部電影所屬的型別呢,現在有些電影是“動作片”,有些是“動作片,冒險片”,等等,我們需要根據電影型別對電影進行分類,

讓我們在dataframe中創建一個新列,該列將保存二值,表示是否存在該流派,首先,讓我們創建一個方法,它將回傳每個電影流派的二值串列,“genreList”現在可用于與值進行比較,

舉個例子,我們在串列中有20個流派,因此,下面的函式將回傳一個包含20個元素的串列,這些元素可以是0或1,例如,我們有一部電影,其中genre='Action',那么新列將包含[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],

類似于“動作,冒險”,我們會有[1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],將流派轉換成這樣的二值串列將有助于輕松地按流派對電影進行分類,

def binary(genre_list):
    binaryList = []
    
    for genre in genreList:
        if genre in genre_list:
            binaryList.append(1)
        else:
            binaryList.append(0)
    
    return binaryList

將binary()函式應用于“genres”列以獲取“genre_list”

對于其他特征,如演員、導演和關鍵字,我們將遵循相同的符號,

movies['genres_bin'] = movies['genres'].apply(lambda x: binary(x))
movies['genres_bin'].head()

步驟5-使用Cast列

讓我們畫一張演員出場率最高的圖表

plt.subplots(figsize=(12,10))
list1=[]
for i in movies['cast']:
    list1.extend(i)
ax=pd.Series(list1).value_counts()[:15].sort_values(ascending=True).plot.barh(width=0.9,color=sns.color_palette('muted',40))
for i, v in enumerate(pd.Series(list1).value_counts()[:15].sort_values(ascending=True).values): 
    ax.text(.8, i, v,fontsize=10,color='white',weight='bold')
plt.title('Actors with highest appearance')
plt.show()

塞繆爾·杰克遜,也就是《復仇者》中的尼克·弗瑞出現在最多的電影中,我最初以為摩根·弗里曼可能是電影數量最多的演員,但資料勝于假設!

當我最初創建所有演員的串列時,它有大約5萬的唯一值,因為很多電影都有大約15-20個演員的條目,

但我們需要所有這些嗎?答案是否定的,我們只需要對電影有最大貢獻的演員,《黑暗騎士》系列電影有很多演員參演,但是我們只會選擇主要演員,比如克里斯蒂安·貝爾,邁克爾·凱恩,希斯·萊杰,我已經從每部電影中選出了4位主要演員,

你可能會想到一個問題,那就是你如何確定演員在電影中的重要性,幸運的是,JSON格式中的演員順序是根據演員對電影的貢獻而定的,

讓我們看看我們是如何做到這一點的,并創建一個列“cast_bin

for i,j in zip(movies['cast'],movies.index):
    list2 = []
    list2 = i[:4]
    movies.loc[j,'cast'] = str(list2)
movies['cast'] = movies['cast'].str.strip('[]').str.replace(' ','').str.replace("'",'')
movies['cast'] = movies['cast'].str.split(',')
for i,j in zip(movies['cast'],movies.index):
    list2 = []
    list2 = i
    list2.sort()
    movies.loc[j,'cast'] = str(list2)
movies['cast']=movies['cast'].str.strip('[]').str.replace(' ','').str.replace("'",'')castList = []
for index, row in movies.iterrows():
    cast = row["cast"]
    
    for i in cast:
        if i not in castList:
            castList.append(i)movies[‘cast_bin’] = movies[‘cast’].apply(lambda x: binary(x))
movies[‘cast_bin’].head()

第6步-使用“Directors ”列

讓我們畫一張導演出場率最高的圖表

def xstr(s):
    if s is None:
        return ''
    return str(s)
movies['director'] = movies['director'].apply(xstr)plt.subplots(figsize=(12,10))
ax = movies[movies['director']!=''].director.value_counts()[:10].sort_values(ascending=True).plot.barh(width=0.9,color=sns.color_palette('muted',40))
for i, v in enumerate(movies[movies['director']!=''].director.value_counts()[:10].sort_values(ascending=True).values): 
    ax.text(.5, i, v,fontsize=12,color='white',weight='bold')
plt.title('Directors with highest movies')
plt.show()

我們創建了一個新的列“director_bin”,正如我們之前所做的那樣

directorList=[]
for i in movies['director']:
    if i not in directorList:
        directorList.append(i)movies['director_bin'] = movies['director'].apply(lambda x: binary(x))
movies.head()

最后,在完成了所有這些作業之后,我們得到了如下所示的movies資料集

步驟7-使用Keywords列

關鍵字或標記包含關于電影的大量資訊,這是查找類似電影的關鍵功能,例如:像《復仇者》和《螞蟻俠》這樣的電影可能有一些共同的關鍵詞,比如超級英雄或者奇跡,

為了分析關鍵詞,我們將嘗試不同的方法,并繪制一個詞云,以獲得更好的直覺:

from wordcloud import WordCloud, STOPWORDS
import nltk
from nltk.corpus import stopwordsplt.subplots(figsize=(12,12))
stop_words = set(stopwords.words('english'))
stop_words.update(',',';','!','?','.','(',')','$','#','+',':','...',' ','')words=movies['keywords'].dropna().apply(nltk.word_tokenize)
word=[]
for i in words:
    word.extend(i)
word=pd.Series(word)
word=([i for i in word.str.lower() if i not in stop_words])
wc = WordCloud(background_color="black", max_words=2000, stopwords=STOPWORDS, max_font_size= 60,width=1000,height=1000)
wc.generate(" ".join(word))
plt.imshow(wc)
plt.axis('off')
fig=plt.gcf()
fig.set_size_inches(10,10)
plt.show()

上面是一個單詞云,顯示了描述電影的主要關鍵字或標簽

我們從以下關鍵字中找到“words_bin”

movies['keywords'] = movies['keywords'].str.strip('[]').str.replace(' ','').str.replace("'",'').str.replace('"','')
movies['keywords'] = movies['keywords'].str.split(',')
for i,j in zip(movies['keywords'],movies.index):
    list2 = []
    list2 = i
    movies.loc[j,'keywords'] = str(list2)
movies['keywords'] = movies['keywords'].str.strip('[]').str.replace(' ','').str.replace("'",'')
movies['keywords'] = movies['keywords'].str.split(',')
for i,j in zip(movies['keywords'],movies.index):
    list2 = []
    list2 = i
    list2.sort()
    movies.loc[j,'keywords'] = str(list2)
movies['keywords'] = movies['keywords'].str.strip('[]').str.replace(' ','').str.replace("'",'')
movies['keywords'] = movies['keywords'].str.split(',')words_list = []
for index, row in movies.iterrows():
    genres = row["keywords"]
    
    for genre in genres:
        if genre not in words_list:
            words_list.append(genre)movies['words_bin'] = movies['keywords'].apply(lambda x: binary(x))
movies = movies[(movies['vote_average']!=0)] #洗掉得分為0且沒有drector名稱的電影
movies = movies[movies['director']!='']

步驟8-電影之間的相似性

我們將使用余弦相似性來尋找兩部電影之間的相似性,余弦相似性是如何作業的?

假設我們有兩個向量,如果向量接近平行,即向量之間的夾角為0,那么我們可以說它們都是“相似的”,因為cos(0)=1,然而,如果向量是正交的,那么我們可以說它們是獨立的或不“相似的”,因為cos(90)=0,

下面是詳細的研究鏈接:http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

下面我定義了一個函式相似度,它將檢查電影之間的相似性,

from scipy import spatialdef Similarity(movieId1, movieId2):
    a = movies.iloc[movieId1]
    b = movies.iloc[movieId2]
    
    genresA = a['genres_bin']
    genresB = b['genres_bin']
    
    genreDistance = spatial.distance.cosine(genresA, genresB)
    
    scoreA = a['cast_bin']
    scoreB = b['cast_bin']
    scoreDistance = spatial.distance.cosine(scoreA, scoreB)
    
    directA = a['director_bin']
    directB = b['director_bin']
    directDistance = spatial.distance.cosine(directA, directB)
    
    wordsA = a['words_bin']
    wordsB = b['words_bin']
    wordsDistance = spatial.distance.cosine(directA, directB)
    return genreDistance + directDistance + scoreDistance + wordsDistance

讓我們檢查兩部隨機電影之間的相似性

我們看到距離大約是2.068,這是很高的,距離越遠,電影就越不相似,讓我們看看這些隨機電影到底是什么,

很明顯,黑暗騎士崛起和馴龍高手2是非常不同的電影,因此,距離是巨大的,

步驟9-分數預測器

所以現在當我們把所有的事情都準備好了,我們現在就要建立一個分數預測器,主要函式是Similarity()函式,它將計算電影之間的相似性,并將找到10部最相似的電影,這10部電影將有助于預測我們想要的電影的分數,我們將取相似電影得分的平均值,然后找到想要的電影的分數,

現在,電影之間的相似性將取決于我們新創建的包含二值串列的列,我們知道,像導演或演員這樣的特點將在電影的成功中扮演非常重要的角色,我們總是認為大衛·芬奇(David Fincher)和克里斯·諾蘭(Chris Nolan)的電影會取得好成績,此外,如果他們與自己最喜歡的演員合作,這些演員總是能給他們帶來成功,并且也在他們最喜歡的題材上作業,那么成功的幾率就會更高,利用這些現象,讓我們嘗試建立我們的分數預測器,

import operatordef predict_score():
    name = input('Enter a movie title: ')
    new_movie = movies[movies['original_title'].str.contains(name)].iloc[0].to_frame().T
    print('Selected Movie: ',new_movie.original_title.values[0])
    def getNeighbors(baseMovie, K):
        distances = []
    
        for index, movie in movies.iterrows():
            if movie['new_id'] != baseMovie['new_id'].values[0]:
                dist = Similarity(baseMovie['new_id'].values[0], movie['new_id'])
                distances.append((movie['new_id'], dist))
    
        distances.sort(key=operator.itemgetter(1))
        neighbors = []
    
        for x in range(K):
            neighbors.append(distances[x])
        return neighbors
    
    K = 10
    avgRating = 0
    neighbors = getNeighbors(new_movie, K)print('\nRecommended Movies: \n')
    for neighbor in neighbors:
        avgRating = avgRating+movies.iloc[neighbor[0]][2]  
        print( movies.iloc[neighbor[0]][0]+" | Genres: "+str(movies.iloc[neighbor[0]][1]).strip('[]').replace(' ','')+" | Rating: "+str(movies.iloc[neighbor[0]][2]))
    
    print('\n')
    avgRating = avgRating/K
    print('The predicted rating for %s is: %f' %(new_movie['original_title'].values[0],avgRating))
    print('The actual rating for %s is %f' %(new_movie['original_title'].values[0],new_movie['vote_average']))

現在只需運行函式如下,并輸入你喜歡的電影10個相似的電影和它的預測收視率

predict_score()

從而完成了基于K近鄰演算法的電影推薦系統的實作,

K值

在這個專案中,我任意選擇了K=10的值,

但在KNN的其它應用中,求K值并不容易,較小的K值意味著噪聲對結果的影響更大,而較大的K值會導致計算開銷,資料科學家通常選擇奇數,如果類的數目是2,另一個選擇k的簡單方法是設定k=sqrt(n),

在這里找到包含完整代碼、資料集和所有插圖的Python Notebook:https://www.kaggle.com/heeraldedhia/movie-ratings-and-recommendation-using-knn

進一步閱讀

  1. 推薦系統:https://en.wikipedia.org/wiki/Recommender_system

  2. 基于K近鄰演算法的機器學習基礎:https://towardsdatascience.com/machine-learning-basics-with-the-k-nearest-neighbors-algorithm-6a6e71d01761

  3. 使用Python的推薦系統.第2部分:協同過濾(K-最近鄰演算法):https://heartbeat.fritz.ai/recommender-systems-with-python-part-ii-collaborative-filtering-k-nearest-neighbors-algorithm-c8dcd5fd89b2#:~:text=When a KNN makes a,the most similar movie recommendations.

  4. 什么是余弦相似性?:https://deepai.org/machine-learning-glossary-and-terms/cosine-similarity

  5. 如何在KNN中找到K的最優值?:https://towardsdatascience.com/how-to-find-the-optimal-value-of-k-in-knn-35d936e554eb

原文鏈接:https://www.analyticsvidhya.com/blog/2020/08/recommendation-system-k-nearest-neighbors/

歡迎關注磐創AI博客站:
http://panchuang.net/

sklearn機器學習中文官方檔案:
http://sklearn123.com/

歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/165394.html

標籤:其他

上一篇:python面向物件編程的基本概念

下一篇:基于Docker的Python開發

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more